【发布时间】:2011-07-05 02:24:46
【问题描述】:
在 C++ 中,在 bool(s) 之间执行 &&(逻辑)和 &(按位)之间有什么区别吗?
bool val1 = foo();
bool val2 = bar();
bool case1 = val1 & val2;
bool case2 = val1 && val2;
case1 和 case2 是否相同,或者如果不同,它们究竟有什么不同?为什么要选择一个而不是另一个?按位和布尔值可移植吗?
【问题讨论】:
-
除了编写清晰的代码外,转换 boolint 可能是一个性能问题。
-
我认为 case1 和 case2 的值相同,并且 bools 的按位与是可移植的。
-
只是为了了解更多信息,实现定义的运算符之一(根据 K&R 书)是有符号值的右移。
-
您的示例使它们相同。但是将它们称为
foo() & bar()和foo() && bar()会产生不同的效果——在后一种情况下,如果 foo() 返回 false,bar()(可以在返回 bool 之上启动电梯)将永远不会执行。跨度> -
相关:Boolean values as 8 bit in compilers. Are operations on them inefficient? re:一些实际编译器遗漏的优化,如 GCC、clang 和 MSVC。以及他们成功的案例。
标签: c++ bitwise-operators boolean logical-operators language-lawyer