所以我有这个程序返回“结果:真”
if (true == false != true) {
cout << "result: true";
}
else {
cout << "result: false";
}
即使我们翻转 if 语句中的比较运算符,编译器仍然会评估表达式为真
if (true != false == true)
我的问题是:
您的两个问题的答案是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] 删除。
我来说两句