为什么while循环的条件表达式中赋值操作的行为不同?(CPP)

pmu*_*ima -4 c++ variable-assignment while-loop

我尝试了x+=1,x=x+1在while循环的条件下.

x = 0 // Initial value of x
Run Code Online (Sandbox Code Playgroud)

第一个案例

while(x+=1 && x < 5){
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

第二个案例

while(x=x+1 && x < 5){
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

第一个案例和第二个案件令人费解.是什么在行为的区别x+=1x=x+1这两个进入无限循环(由于短路).但是第一种情况下x的值被置于1.

有什么想法吗 ?

根据Is x + = 1比x = x + 1更有效吗?,大多数编译器(好)优化并做同样的事情.

我正在使用的编译器 - gcc版本5.4.0

You*_*You 5

你的困惑源于缺乏括号.您的表达式按顺序等效于以下内容:

(x++) && (x < 5)     // First case
x+=(1 && (x < 5))    // Second case
x=((x+1) && (x < 5)) // Third case
Run Code Online (Sandbox Code Playgroud)

除了隐式转换等,这会产生您所看到的行为.

这就是我们使用括号,并在编译时启用警告的原因.