簡體   English   中英

按位AND與函數在C ++中返回bool

[英]Bitwise AND with function returning bool in C++

我編寫了一個程序,列出了一組內容中的錯誤,並在結尾返回一個布爾值(返回true表示沒有找到錯誤)。

以下是我的代碼摘要:

bool checkStuff1() {/*...*/}
bool checkStuff2() {/*...*/}
// ...
bool checkStuffN() {/*...*/}

bool checkAllStuff()
{
    bool result = true;
    result &= checkStuff1();
    result &= checkStuff2();
    // ...
    result &= checkStuffN();
    return result;
}

我相信result的價值最終會是正確的。 但是,我想確保調用所有函數checkStuffX() (因為它們在失敗時打印錯誤消息,並且我希望打印所有錯誤消息)。

我知道如果我這樣編寫,它會在第一個失敗后跳過所有checkStuffX()

result = result && checkStuffX(); // Will not call checkStuffX() if result is already false

我也知道,如果我這樣寫,它將調用所有checkStuffX()函數:

result = checkStuffX() && result; // Will always call checkStuffX() even if result is false

但我想知道我使用的代碼的行為,按位比較,是否由標准確定並保證?

或者是否存在未定義行為的風險,具體取決於所使用的編譯器及其優化?

這很好。

您所指的短路評估僅適用於&&|| 運營商。

雖然轉換int < - > bool可能是性能問題,但如果你有很多檢查,它會工作。 哦,如果所有函數都有相同的類型,你可以利用函數指針和for循環。

bool  (*checks[])( void )= {checkStuff1, checkStuff2 ...  checkStuffN};

bool result = true;
for (int i = 0; i < sizeof(checks)/sizeof(checks[0]); result = checks[i++]() && result );

如果你可以使用ranged for()代碼看起來更簡單 - 就像for(auto i : checks) 如果您在代碼中的其他地方聲明了該過程的優點,需要刪除或添加一個步驟,您只需修改數組的聲明(或者您的程序可以更改它,有效地更改工作流!)。 缺點 - 您不能將它與具有不同原型的支票一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM