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

C++新手编写的while循环程序为何出现无限输出?

问题分析

你的代码如下:

int main() {
    int i = 12;
    while (i > 10) {
        cout << i;
        i++;
    }
    return 0;
}

导致程序持续运行的核心原因有两点:

  • 有符号整数溢出属于未定义行为
    C++标准明确规定,有符号整数(如int)溢出后的行为是未定义的。编译器可以基于“溢出永远不会发生”的假设做优化——既然i从12开始每次自增1,逻辑上只会越来越大,永远满足i>10的条件,因此直接将循环优化为无限循环,根本不会执行到i达到最大值的环节。

  • 未优化情况下,溢出前的输出量极大
    即便编译器未做优化,int从12增长到最大值2147483647需要输出超过20亿个数字,这个过程耗时极长,看起来和无限运行无异,你可能还没等到溢出发生就误以为程序不会终止。而溢出后,i会变为-2147483648(int的最小值),此时i>10不成立,循环才会终止,但这个过程几乎无法等待到。

如果要避免这类问题,要么改用无符号整数(unsigned int,其溢出行为是明确的回绕到0),要么在循环条件中增加上限判断,比如while (i > 10 && i < INT_MAX)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:32:58