布尔逐位运算符和逻辑运算符



我有两个booleans,它们之间有OR操作。

根据我的理解,我可以使用bitwiselogical运算符,它将具有相同的效果:

按位:

bool first = true, second = false;
first = first | second;

逻辑:

bool first = true, second = false;
first = first || second;

有什么不同吗?有什么更好的方法?

如注释中所述,在执行逻辑时应使用逻辑运算符,在执行逐位运算时应使用逐位运算符。

它们之间的主要区别之一是C++会使逻辑运算短路;这意味着它将在清楚运算结果后立即停止计算操作数

例如,这个代码:

bool foo() {
std::puts("foo");
return true;
}
bool bar() {
std::puts("bar");
return true;
}
//...
auto const res = foo() || bar();

将只输出:

foo

函数bar不会被求值,因为在这种情况下,求值foo就足以知道表达式foo() || bar()的结果是true

最新更新