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

无限for循环中i++位置不同为何导致执行结果差异?

两段代码执行差异的原因解析

代码片段1

int i=1;
for(;;){
    if (i<5){
        cout<<"Hello World"<<endl;
        i++;
    }
}

代码片段2

int i=1;
for(;;){
    if (i<5){
        cout<<"Hello World"<<endl;
    }
    i++;
}

执行流程差异分析

  • 代码片段1:
    变量i初始值为1,进入无限for循环后,只有当i<5成立时,才会执行打印操作,同时让i自增1。当i增加到5时,i<5不成立,既不打印也不执行i++,此后i的值一直保持5,每次循环都不满足打印条件,所以只会输出4次"Hello World",之后循环空转无输出。

  • 代码片段2:
    同样i初始值为1,前4次循环和代码1一致:满足i<5时打印,然后执行i++。但当i增加到5后,虽然i<5不成立不会打印,但i++是在if代码块外面,每次循环都会执行。此时i会持续递增到6、7、8……直到达到int类型的最大值,再执行i++会触发整数溢出(多数编译器下会绕回成负数),负数必然小于5,于是又会开始打印,之后i继续递增,循环往复,导致无限输出"Hello World"。

核心区别

两者的本质差异在于i++的执行条件:

  • 代码1中i++仅在满足打印条件时执行,一旦i≥5就停止递增,永远无法再触发打印;
  • 代码2中i++不受if条件限制,每次循环必执行,i会无限递增直至溢出变负,再次满足打印条件,形成无限打印的循环。

内容的提问来源于stack exchange,提问作者Utkarsh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:35:15