代码片段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++) 如何产生如此大的差异?
在第一个片段中,当
i
达到值 5 时,它不再更改并保持该值。
在第二个中,
i
不断增加。它会溢出,这足以调用未定义的行为。常见的实现对负数使用 2 补码,因此 INT_MAX + 1 给出...一个负数 (INT_MIN)。确实小于 5!