这是以下代码:
int main () {
int x = 3, y = 0 ;
if(x >= 3 && y+=1){
if(y<=5){
printf("%d\n", ++x);
}
}
else{
printf("%d\n", x++);
}
printf("x=%d, y=%d", x, y++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,并且y+=1是它的原因,我认为它的行为方式与我将其替换为++y(有效)相同。
为什么如果我用 ++y 替换 y+=1 代码有效?为什么 y+=1 导致代码失败?
问题是运算符优先级。+=的优先级低于&&,所以
if (x >= 3 && y += 1)
Run Code Online (Sandbox Code Playgroud)
被解析为
if (((x >= 3) && y) += 1)
Run Code Online (Sandbox Code Playgroud)
这是无效的,因为((x >= 3) && y)不是可以递增的左值。
添加括号来覆盖它。
if (x >= 3 && (y+=1)){
Run Code Online (Sandbox Code Playgroud)