无限循环是否会由它自己结束

Bus*_*mer 1 c++ bits for-loop infinite-loop segmentation-fault

我们假设我们有以下循环:

    for (int i = 1; i < 2; i--)
    {
        cout << i << endl;
    }
Run Code Online (Sandbox Code Playgroud)

毫无疑问,这是一个无限的循环.但是,我的问题是,它会运行多长时间?因为我的教授说,鉴于int是4 bytes = 32 bits,它可以存储一个数字-2147483648 to 2147483647.鉴于此,他接着说,在一个for循环中,如果它到达其中一个数字,并且循环仍然被编程为继续(就像这个那样),那么数字将变为正数,条件将满足,终止循环.

我的问题恰恰是:这是怎么发生的?为什么数字-2147483648在for循环中变为+2147483648,为什么+2147483648在for循环中变为-2147483648?因为我曾经认为一旦计数器达到2147483649就会发生分段错误.感谢您的回复!

Fan*_*Fox 5

回答你的标题问题; Will an Infinite Loop ever end by Itself:

没有.

但是你的循环不仅不是无限的,因为for循环条件它甚至不会运行一次.

for (int i = 1; i > 2; i--)
Run Code Online (Sandbox Code Playgroud)

i,1将永远不会满足循环条件i> 2.

让我们说,虽然你的意思i < 2,然后答案是,我不知道.整数溢出是未定义的行为C++(见这里).

在大多数情况下,它会回滚,但由于行为未定义,因此没有必要讨论真正发生的事情.