我有两个booleans
,它们之间有OR
操作。
根据我的理解,我可以使用bitwise
或logical
运算符,它将具有相同的效果:
按位:
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
。