按位或逻辑或的区别

Jus*_*n M 1 c++ boolean bitwise-or logical-or

当涉及到 C++ 中的布尔变量时,按位运算和逻辑 OR 运算有什么区别?在整数域中,这是很清楚的,但是当涉及到布尔值时,它们两者之间是否有任何性能优势或行为变化?

布尔 VAR = TRUE , BOOL VAR2= TRUE

VAR有区别吗| VAR2 和 VAR || VAR2

小智 5

对于性能差异,逻辑“或”短路(例如,在 中op1 || op2,如果op1计算结果为trueop2则不计算),但按位则不会。这也造成了行为差异:

if (op1 == nullptr || fn(op1)) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

由于短路行为,此代码永远不会调用fnwith 。nullptr另一方面,如果逻辑 OR 被替换为按位,fn则将始终被调用。如果fn使用 调用时出现副作用或不良行为nullptr,则会产生行为差异。