You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中for循环里i++和i--有什么区别?为何i--会导致死循环?

C++ for循环死循环问题解答

死循环原因

C++中for循环的执行顺序遵循固定逻辑:

  1. 首先执行一次初始化语句,你的代码中对应int i = 0,仅在循环启动前运行一次
  2. 校验循环条件i < 10:条件成立则执行循环体,不成立则直接退出循环
  3. 执行完循环体后,运行迭代表达式(就是你写的i++/i--),之后回到第2步重新校验条件

你第一段正常代码的执行逻辑:
i初始值为0,每次迭代后自增1,i的取值依次为0→1→2→…→9,共10次满足i < 10的条件,对应输出10次Hi;当i自增到10时,校验10 < 10不成立,循环正常退出。

替换为i--后的执行逻辑:
i初始值为0,第一次校验0 < 10成立,执行打印后i自减为-1;第二次校验-1 < 10仍然成立,执行打印后i变为-2,以此类推。在有符号整数溢出发生前,i的取值始终为负数,天然满足i < 10的条件;即便后续发生整数溢出(C++标准中属于未定义行为),多数编译器实现下会绕回到正整数最大值,这个过程需要执行数十亿次循环,在人类感知层面就是程序永远不会停止,表现为死循环。

i++和i--的区别

  • i++是后缀自增运算符:功能是将变量i的数值加1,表达式本身的返回值是i自增前的旧值
  • i--是后缀自减运算符:功能是将变量i的数值减1,表达式本身的返回值是i自减前的旧值

在你的for循环场景中,迭代表达式没有用到运算符的返回值,所以i++和++i的实际作用完全相同(都是给i加1),i--和--i的实际作用也完全相同(都是给i减1)。


内容的提问来源于stack exchange,提问作者Seth Israel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:36:03