繁体   English   中英

在C ++中,a + = b == c是什么?

[英]What a+=b == c does in C++?

我的这段代码整天困扰着我,我想我需要一些帮助,这是用C ++编写的代码:

    int main()
    {
        int a = 3, b = 4;
        if (a+=2 == b) {
            cout << a << endl;
            cout << "True" << endl;
        }
        return 0;
    }

无论ab值是什么, if语句始终为true,并且b的值不会更改(即, acout在首次分配时将打印a的值。但是,当我放置a一对括号(a+=2) ,代码将按预期执行,所以我的问题是,为什么if语句中的表达式始终为true

运算符== 优先级高于+= 该语句等于a += (2 == b) 该语句返回的新价值a ,当新的值不是零,这是真的。

的值a不改变这里,因为2 == b是假的,转换为整数时,这是零。

运算符优先级意味着a+=2 == b将被分组为a += (2 == b) 因此ab2之间的比较结果而增加。

比较结果是一个布尔值,因此当转换为整数时,它将产生01

由于复合加法( += )也会求和运算的结果,因此if语句中的条件将在a的值加上01后检查a的值不为0 由于a初始化为3 ,因此该条件为真。

https://zh.cppreference.com/w/cpp/language/operator_precedence

您的答案是所谓的运算符优先级和布尔值的定义。

C ++以特定的方式评估您的if语句的条件。 首先,它评估您的'=='运算符。 在大多数情况下2将不等于'b'并且==运算符将返回false。 您现在拥有:

int main()
{
    int a = 3, b = 4;
    if (a += false) {
        cout << a << endl;
        cout << "True" << endl;
    }
    return 0;
}

在您认为布尔假值也为0之前,这几乎没有意义。您现在拥有:

int main()
{
    int a = 3, b = 4;
    if (a += 0) {
        cout << a << endl;
        cout << "True" << endl;
    }
    return 0;
}

'a'+ = 0将始终保留a的值。 因此,在输出时,您不会更改'a'和'b'值。

如果使用b初始化为2再次运行代码,如下所示:

int main()
{
    int a = 3, b = 2;
    if (a += 2 == b) { // 2 == b becomes true (which is 1); a += 1 is then executed;
        cout << a << endl;
        cout << "True" << endl;
    }
    return 0;
}

您得到的“ a”输出为3。 这是因为true也是1,然后将1加到'a'。

if语句似乎总是运行的原因是,在if语句中,任何非零数字都等于true。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM