无限for循环if条件

问题描述 投票:0回答:1

代码片段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 产生一个输出,其中“Hello World”被打印 4 次,然后循环继续,没有输出,这是预期的。 但是,“Hello World”在片段 2 中无限期地打印。为什么条件 (i<5) not checked in snippet 2 even after i=>5?在这些片段中的 if 块内部或外部递增 i (i++) 如何产生如此大的差异?

c++ loops if-statement infinite-loop
1个回答
0
投票

在第一个片段中,当

i
达到值 5 时,它不再更改并保持该值。

在第二个中,

i
不断增加。它会溢出,这足以调用未定义的行为。常见的实现对负数使用 2 补码,因此 INT_MAX + 1 给出...一个负数 (INT_MIN)。确实小于 5!

© www.soinside.com 2019 - 2024. All rights reserved.