首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个结合赋值和相等检查的if语句返回true?

为什么这个结合赋值和相等检查的if语句返回true?
EN

Stack Overflow用户
提问于 2019-05-23 04:38:41
回答 3查看 11.9K关注 0票数 217

我一直在思考一些初学者的错误,最后我遇到了if语句中的错误。我将代码扩展为:

代码语言:javascript
复制
int i = 0;
if (i = 1 && i == 0) {
    std::cout << i;
}

我已经看到if语句返回true,并且它将couti设置为1。如果在If语句中为i分配了1,为什么i == 0返回true

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-23 04:44:13

这与operator precedence有关。

代码语言:javascript
复制
if (i = 1 && i == 0)

不是

代码语言:javascript
复制
if ((i = 1) && (i == 0))

因为&&==都比=具有更高的优先级。它真正起作用的是

代码语言:javascript
复制
if (i = (1 && (i == 0)))

它将1 && (i == 0)的结果赋值给i。因此,如果i0开始,则i == 0true,因此1 && truetrue (或1),然后将i设置为1。然后,由于1为true,您可以输入if块并打印分配给i的值。

票数 394
EN

Stack Overflow用户

发布于 2019-05-23 04:45:11

假设你的代码看起来像这样:

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main()  {
    int i = 0;
    if (i = 1 && i == 0) {
        cout << i;
    }
}

然后是这个:

代码语言:javascript
复制
if (i = 1 && i == 0) {

计算结果为

代码语言:javascript
复制
 if (i = (1 && i == 0)) {

因此,i被设置为1

票数 17
EN

Stack Overflow用户

发布于 2019-05-29 03:48:57

它与解析从右到左的规则有关。例如y= x+5。

所有子表达式都按重要性加权。从右到左计算两个同等重要的表达式。首先执行&& expression部分,然后是LHS。

对我来说很有意义。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56264674

复制
相关文章

相似问题

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