-1

我很难理解这段代码的作用:

#include <iostream>

using namespace std;

int main()
{
    int x = 0, y = 0;
    if (x++ && y++)
        y += 2;
    cout << x + y << endl;
    return 0;
}

C++ 的输出为 1。但我认为应该是2?

为什么?因为在 if 语句的 () 中,我认为应该只检查它是否为真/假,所以它不会增加/减少任何整数。由于默认情况下这是真的,它增加了 2 的 y?并且输出应该是0+2 = 2,但它只输出1?

4

4 回答 4

6

if (x++ && y++)不会这样做y++,因为逻辑与运算符 ( &&) 左侧的条件是false因为x++将返回0并递增x1。

由于false && expression任何表达式都会产生 false,因此无需评估其余部分。

因此,您最终得到x = 1and y = 0

这称为短路评估

于 2013-11-07T18:24:27.683 回答
1

post ++operator 具有高优先级,并且&&允许 operator 短路评估。发生的事情if (x++ && y++)是它首先评估x++. 结果为 0 并递增 x。由于 0 为假 && 将短路y++(不会执行)的评估。此外 if 将评估为 false 并且不会执行y+=2.

所以现在你有x=1y=0

所以结果是1。

于 2013-11-07T18:24:44.520 回答
0

它将首先执行x++并且编译器知道因此表达式x++ && y++将为 false 并将忽略y++

结果之后 x = 1 和 y = 0;

它和 writing 一样if(false && do_something()),在这种情况下do_something()永远不会被调用。

于 2013-11-07T18:24:20.740 回答
0

我建议您查看运算符优先级图表:http ://en.cppreference.com/w/cpp/language/operator_precedence

//in a statement, x++ will evaluate x then increment it by 1.
//in a statement, ++x will increment x by 1 then evaluate it.

如果您很难理解它,请尝试以下代码以更好地理解:

#include <iostream>

using namespace std;

int main()
{
    int x = 0, y = 0;
    if (++x && ++y) // in your case, with the previous code, it gives (0 && 0)
    // instead of if statement you can try the following : cout << x++;  then cout << ++x; 
    // and notice the difference
        y += 2;
    cout << x + y << endl;
    return 0;
}
于 2013-11-07T18:29:54.977 回答