编译器如何在 if 语句中使用多个比较运算符计算表达式?

疯先生

所以我有这个程序返回“结果:真”

if (true == false != true) {
    cout << "result: true";
}
else {
    cout << "result: false";
}

即使我们翻转 if 语句中的比较运算符,编译器仍然会评估表达式为真

if (true != false == true)

我的问题是:

  1. 编译器实际上是如何计算表达式的?
  2. 以及 if 语句中存在的两个比较运算符中的哪个比较运算符优先?
特山沙努卡 J

您的两个问题的答案是operator precedence==!=运营商获得相同的优先级,这意味着他们将在给定的顺序进行评估。

所以在true == false != true, 被评估为(true == false) != true第一个语句true==false为假,完整的语句现在变成了false!=true它的计算结果true

同样,第二个声明true != false == true成为(true != false) == true其计算结果为true


编辑

阅读@Pete 的评论后,我又读了一些。显然存在与这些情况相关的关联性

来自https://en.cppreference.com/w/cpp/language/operator_precedence

具有相同优先级的运算符在它们的结合性方向上绑定到它们的参数。例如,表达式 a = b = c 被解析为 a = (b = c),而不是 (a = b) = c,因为赋值是从右到左关联的,但是 a + b - c 被解析(a + b) - c 而不是 a + (b - c) 因为加法和减法的从左到右结合性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在CLI中使用openmodelica编译器?

如何在MSBuild中使用Clang编译器?

如何在Scons中使用交叉编译器?

如何在Linux中使用Intel编译器?

如何在 Truffle 中使用旧的 solc 编译器

如何在nginx的“ if”语句中使用“或”运算符?

如何在正则表达式.Net中使用AND运算符和NOT运算符

如何在Java正则表达式中使用“和”运算符

如何在实体框架lamba表达式中使用Like运算符

如何在XSLT的正则表达式模式中使用NOT运算符(^)?

如何在 Python 正则表达式中使用 OR 运算符?

如何在带括号的javascript中使用正则表达式运算符“或”?

如何在Bash中的复杂条件表达式中使用逻辑非运算符?

如何在ssrs表达式中使用IN运算符

内部编译器错误-开关表达式中的模板化转换运算符

如何评估包含多个^ =运算符的表达式?

使用三元运算符在计算器上非法开始表达式

编译器如何使用后缀运算符处理return语句?

如何在使用CMake进行编译时修复“ CXX编译器的未知功能”(Linux Mint)

在Kotlin中使用Elvis运算符时,如何取反布尔表达式?

在match语句中使用自定义计算表达式运算符

C ++编译器如何区分*运算符的用法?

编译器如何调用运算符转换?

如何在浏览器中使用TypeScript编译器?

如何在正则表达式中使用逻辑运算符包含多个否定的先行和后向条件

在表达式中使用时,编译器如何记住声明的变量?

java如何使用编译器

如何使用Clang的CUDA编译器?

如何在Android Studio随附的命令行中使用kotlin编译器?