对于多个布尔评估,正在使用&&比||更有效率?

时间:2018-04-22 02:25:05

标签: c++

假设我们要评估(A || B || C)的布尔值 这在逻辑上等于!(!A && !B && !C)

如果(!A)为假,因为整个表达式值变为false,使用!(!A && !B && !C)比使用~更节省时间吗?该计划会注意到吗?或者程序仍然需要在返回最终结果之前评估(!B)和(!C)的值?

P.S。只需更正de'Morgan表达式并从!更改为tuple(sequence)。谢谢你们。

this link Retired Ninjaoptimized version David Foerster显示的P.S.2。汇编代码实际上是一样的!

1 个答案:

答案 0 :(得分:10)

(A || B || C)在逻辑上等于!(!A && !B && !C),您错过了内部!。第二个表达式中的短路发生在!Afalse时,或等效于Atrue时。但是当Atrue时,第一个表达式也会短路。换句话说,这两个表达式在短路方面表现相同。

正如退休忍者在评论中提到的那样,这两个表达式产生相同的汇编代码,因此它们之间根本没有区别,除了一个更难阅读。