if-statemenet条件

use*_*407 -1 c++ if-statement

我无法理解这段代码的作用:

#include <iostream>

using namespace std;

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

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

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

Moh*_*oun 6

if (x++ && y++)不会做y++,因为条件的逻辑和操作员(左&&)是false因为x++将返回0和增量x1.

由于false && expression任何表达式都会产生错误,因此无需评估其余表达式.

因此,你最终会x = 1和y = 0.

这称为短路评估.