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