C++中for循环里i++和i--有什么区别?为何i--会导致死循环?
C++ for循环死循环问题解答
死循环原因
C++中for循环的执行顺序遵循固定逻辑:
- 首先执行一次初始化语句,你的代码中对应
int i = 0,仅在循环启动前运行一次 - 校验循环条件
i < 10:条件成立则执行循环体,不成立则直接退出循环 - 执行完循环体后,运行迭代表达式(就是你写的
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
相关产品推荐
相关产品推荐

