C++ if条件内自增未执行问题咨询:为何输出不是4?
为啥你的C++代码输出不是4?
嘿,这个问题其实是C++里短路求值和运算符优先级这两个知识点在搞鬼,我给你一步步拆解明白:
第一步:先理清运算符优先级
在C++里,&&的优先级比||高,所以你写的条件表达式:
(1==1)||(c++==4)&&(1==1)
会被编译器自动解析成:
(1==1) || [(c++==4) && (1==1)]
也就是先计算右边的&&组合逻辑,再和左边的||做最终运算。
第二步:短路求值的关键作用
C++里的逻辑或||有个短路特性:如果左边的表达式已经是true,那么右边的表达式会被直接跳过,完全不会执行——因为逻辑或只要有一个为真,结果就确定是真了,没必要再浪费算力去计算右边的内容。
回到你的代码:
- 左边的
1==1显然是true,所以右边的(c++==4)&&(1==1)整个代码块都不会被执行 - 这就意味着
c++这个自增操作根本没机会运行,c的值还是初始的3
所以程序最终输出的是3,而不是你预期的4。
验证一下:触发右边执行的情况
要是把左边改成false,比如:
int c=3; if((1==0)||(c++==4)&&(1==1)) { cout << c << endl; }
这时候左边1==0是false,编译器才会去计算右边的(c++==4)&&(1==1),c++会被执行(虽然c++==4是false,但自增操作已经完成了),所以输出就是4了,这也能反过来验证刚才的结论。
内容的提问来源于stack exchange,提问作者Valumin
相关产品推荐
相关产品推荐

