首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译器如何在if-语句中使用多个比较运算符计算表达式?

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

Stack Overflow用户
提问于 2021-09-08 05:00:58
回答 2查看 109关注 0票数 1

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

代码语言:javascript
运行
复制
if (true == false != true) {
    cout << "result: true";
}
else {
    cout << "result: false";
}

即使我们在if语句中翻转比较运算符,编译器仍然计算表达式为true。

代码语言:javascript
运行
复制
if (true != false == true)

我的问题是:

  1. 编译器如何实际计算表达式?
  2. 而在if-语句中给出的两个比较运算符中的哪一个比较运算符,则优先考虑?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 05:13:46

你们两个问题的答案都是运算符优先==!=运算符具有相同的优先级,这意味着它们将按照给定的顺序进行计算。

因此,在true == false != true中,被计算为(true == false) != true第一语句true==false为false,完整的语句现在变成false!=true,计算结果为true

类似地,第二个语句true != false == true变成(true != false) == true,在结尾处计算为true

编辑

在看完@Pete的评论后,我又读了一些。显然,与这类情况相关的是结合性性质。

来自优先

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

票数 4
EN

Stack Overflow用户

发布于 2021-09-08 05:19:00

  1. 对于这种特殊情况,编译器从左到右计算表达式为"==“和"!=”具有同等的优先级。
  2. 如上所述,这两个运算符具有相同的优先级。有关更多信息,请访问C++算子优先
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69097245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档