C++ for循环中递减运算符的特殊用法:为何首次输出结果为98?
C++ 后缀递减运算符在for循环条件中的执行逻辑解析
首先我们先明确C++中两个核心规则:for循环的执行顺序、后缀自减运算符的特性。
核心规则说明
- 标准
for循环的执行流程顺序为:- 执行一次初始化表达式
- 求值条件表达式:若结果为真则执行循环体,若为假则直接终止循环
- 循环体执行完成后,执行更新表达式,之后回到第2步重复判断
- 后缀自减运算符
i--的特性:先返回变量当前的原始值,再立即对变量本身执行减1的修改操作,修改操作不会延迟到后续代码执行时才生效。
问题代码的执行步骤拆解
你给出的代码把自减操作写在了条件表达式的位置,没有单独的更新表达式,首次运行的执行步骤如下:
- 初始化语句
int i=99执行完成,此时i的值为99 - 求值条件表达式
i--:- 后缀自减先返回
i的原始值99,条件判断时99等价于布尔值true,判定可以进入循环体 - 表达式求值完成后立刻执行减1操作,此时
i的值已经被修改为98
- 后缀自减先返回
- 执行循环体
cout << i,输出当前i的值98,也就是你看到的首次输出结果。
常见误解澄清
你之前认为后缀递减会在下一次迭代才执行,是把条件表达式中的自减和常规for循环第三个位置的更新表达式的执行时机搞混了:
如果是常规写法for(int i=99; i>0; i--) { cout << i; },自减操作在更新表达式的位置,会在循环体执行完之后才运行,所以首次输出的是99。但你给出的代码把自减移到了条件表达式位置,求值完条件就会立刻生效,自然会出现首次输出98的结果。
内容的提问来源于stack exchange,提问作者MKN567
相关产品推荐
相关产品推荐

