2012-10-10 77 views
0

對於你們中的一些人來說,答案可能很明顯,但由於我找不到答案,我需要問一下。 通常,如果一個函數必須返回是否全部執行都沒有問題,那麼我使用布爾值來跟蹤任何失敗。自我邏輯和?

bool myFunction() 
{ 
    bool ok = true; 
    if (...) { 
     if (...) { 
      ok = ...; 
     } 
     ok = ok && (...); 
    } 
    ok = ok && (...); 
    return ok; 
} 

由於沒有&&=存在,我使用了大量的語法:ok = ok && (...)(...)可以是一個條件或值)。但我覺得這很不起眼。是否有任何C++標準兼容的方式來更簡潔和優雅地編寫它?

+0

到的答案[這個問題](http://stackoverflow.com/questions/2488406/why-doesnt-c-have-or-for-booleans)解釋爲什麼它是安全的使用'&='。 – jogojapan

回答

2

你可以只使用&=用布爾標誌:

bool myFunction() 
{ 
    bool ok = true; 
    if (...) { 
     if (...) { 
      ok &= ...; 
     } 
     ok &= ...; 
    } 
    ok &= ...; 
    return ok; 
} 
2

就提前返回,因爲沒有額外的代碼執行,如果ok變得false

bool myFunction() 
{ 
    bool ok = true; 
    if (...) { 
     if (...) { 
      if (!...) return false; 
     } 
     if (!...) return false; 
    } 

    return (...); 
} 

這是另一個原因,例外的是比錯誤代碼更好:如果你不處理他們,你不spaghettify正常代碼路徑的代碼。

1

您可以使用&=運算符,因爲bool是1位類型,所有算術運算符都可以工作。

1

嘗試使用:

&= 

代替& & =

0

最標準的方式做,這是返回當條件不滿足時爲false,否則在方法結束時返回true。所以實際上你甚至不需要這個布爾變量。
只是用它這樣的:

bool myFunction() 
{ 
    if (...) { 

    } else return false; 

    return true; 
} 

如果你堅持使用布爾使用& =運算符。

0

或者,您可以選擇不使用返回值。

傳遞一個對象或函數指針以用於成功或失敗。

E.g.與對象:

void onConditionOtherwise(BooleanAction& action) 
{ 
    if (...) && (...) { 
     action.success(); 
    } else { 
     action.failure(); 
    } 
}