c++ - 对于多个 bool 运算,使用 && 是否比 || 更有效?

标签 c++

假设我们要计算 (A || B || C) 的 bool 值 这在逻辑上等于 !(!A && !B && !C)

使用 !(!A && !B && !C) 会不会比另一个 if (!A) 为 false 因为整个表达式值变为 false 更省时?程序会注意到吗?或者程序在返回最终结果之前还需要计算(!B)和(!C)的值?

附言只需更正 de'Morgan 表达式并将 ~ 更改为 !。谢谢大家。

P.S.2 显示在 this link 中通过 Retired Ninjaoptimized version通过 David Foerster .汇编代码其实是一样的!

最佳答案

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

正如 Retired Ninja 在评论中提到的,这两个表达式产生相同的汇编代码,因此它们之间完全没有区别,只是一个更难阅读。

关于c++ - 对于多个 bool 运算,使用 && 是否比 || 更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961950/

相关文章:

c++ - 什么是等同于 JavaFx 和 AnimationTimer 类的 C++?

c++ - C++ unordered_map 的 rehash() 和 reserve() 方法有什么区别?

c++ - 在多线程环境中从 STL Map 读取/写入

c++ - 多重继承冲突

c++ - 性能:循环中的声明 VS 循环中的重新初始化

c++ - Qt 应用程序随机崩溃通过使用回调和从 std::thread 或 boost::thread 发出信号

c++ - 防止在模板中使用某些类型

c++ - 0 的模板函数模棱两可的参数推导

c++ - 有没有办法将 OpenCV Mat_ 与自定义类一起使用?

c++ - 这是 Objective-C 代码文件中的 C++ 吗?