C++示例代码中if条件判断语句的执行逻辑解析
C++程序if条件语句工作原理解析
针对给出的代码,核心要先搞懂3个C++基础规则,再顺着执行流程走一遍就能完全明白:
前置规则说明
- 后置自增/自减(如
b++、b--):先拿变量当前的原值参与所在位置的运算,运算完成后立刻给变量值±1 - 前置自增/自减(如
++c):先给变量值±1,再拿修改后的新值参与所在位置的运算 - 逻辑与运算符
&&的短路求值规则:&&需要左右两个表达式都为真,整体结果才为真;如果左边的表达式计算结果为假,会直接判定整个条件为假,完全不会执行右边的表达式,属于编译器的性能优化逻辑。
逐行执行流程拆解
程序初始状态:定义整型变量b=6,c=5
- 开始计算if的判断条件:
b++==7 && ++c==5- 优先计算
&&左侧的b++==7:按照后置自增规则,先取b的当前值6和7做相等比较,6==7显然不成立,结果为false;比较完成后b立刻自增,值从6变为7 - 触发短路规则:左侧结果已经是false,整个if条件必然不成立,右侧的
++c==5不会被执行,因此c的值全程保持初始的5,没有任何改动 - if条件整体为假,跳过if对应的代码块,直接进入else分支
- 优先计算
- 执行else分支代码:
cout<<"ELSE 1ST OUTPUT "<<b--<<endl;- 这里用了后置自减
b--,先取b当前的值7参与输出,输出完成后b自减1,值变为6 - 本行输出内容为:
ELSE 1ST OUTPUT 7
- 这里用了后置自减
- 执行if-else结构之后的代码:
cout<<"ELSE 2ND OUTPUT IS "<<b<<endl;- 此时b的值已经是6,直接输出即可
- 本行输出内容为:
ELSE 2ND OUTPUT IS 6
程序最终运行结果
ELSE 1ST OUTPUT 7 ELSE 2ND OUTPUT IS 6
初学者常见误区
- 不要误以为后置自增是等整个if语句跑完才修改变量值:
b++的自增动作在b++==7这个子表达式判断完成后就立刻执行了,所以进入else分支时b已经是7了 - 不要忽略
&&的短路特性:很多初学者会错误认为c会执行++c变成6,实际上因为左侧条件已经为假,右侧代码根本不会运行 - 不管是在判断逻辑还是输出逻辑里,前置/后置自增的"先改后用/先用后改"规则都是一致的,不会因为场景变化改变逻辑
内容的提问来源于stack exchange,提问作者kashif javed
相关产品推荐
相关产品推荐

