假设我们要计算 (A || B || C)
的 bool 值
这在逻辑上等于 !(!A && !B && !C)
。
使用 !(!A && !B && !C)
会不会比另一个 if (!A) 为 false 因为整个表达式值变为 false 更省时?程序会注意到吗?或者程序在返回最终结果之前还需要计算(!B)和(!C)的值?
附言只需更正 de'Morgan 表达式并将 ~
更改为 !
。谢谢大家。
P.S.2 显示在 this link 中通过 Retired Ninja和 optimized version通过 David Foerster .汇编代码其实是一样的!
最佳答案
(A || B || C)
在逻辑上等于 !(!A && !B && !C)
,您错过了内部 !
当 !A
为 false
时,第二个表达式中的短路发生,或者等效地,当 A
为 true
时。但是当 A
为 true
时,第一个表达式也会短路。换句话说,这两个表达式在短路方面的表现相同。
正如 Retired Ninja 在评论中提到的,这两个表达式产生相同的汇编代码,因此它们之间完全没有区别,只是一个更难阅读。
关于c++ - 对于多个 bool 运算,使用 && 是否比 || 更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961950/