按位AND与函数在C++中返回bool

teu*_*oui 8 c++ boolean bitwise-operators

我编写了一个程序,列出了一组内容中的错误,并在结尾返回一个布尔值(返回true表示没有找到错误).

以下是我的代码摘要:

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

bool checkAllStuff()
{
    bool result = true;
    result &= checkStuff1();
    result &= checkStuff2();
    // ...
    result &= checkStuffN();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我相信最终result将是正确的价值.但是,我想确保checkStuffX()调用所有函数(因为它们在失败时打印错误消息,并且我希望打印所有错误消息).

我知道,如果我这样写,它会checkStuffX()在第一个失败之后跳过所有:

result = result && checkStuffX(); // Will not call checkStuffX() if result is already false
Run Code Online (Sandbox Code Playgroud)

我也知道,如果我这样写,它会调用所有checkStuffX()函数:

result = checkStuffX() && result; // Will always call checkStuffX() even if result is false
Run Code Online (Sandbox Code Playgroud)

但我想知道我使用的代码的行为,按位比较,是否由标准确定并保证?

或者是否存在未定义行为的风险,具体取决于所使用的编译器及其优化?

Sam*_*hik 9

这很好.

您所指的短路评估仅适用于&&||运营商.