我是从Facebook帖子上得到的。这里发生了什么事?请参阅ideone中的输出。输出超过10行。
代码:
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; ++i)
cout << i*1000000000 << endl;
}
答案 0 :(得分:3)
您的平台很可能具有32位int
。因此1'000'000'000
是int
,编译器也将尝试将i * 1'000'000'000
评估为int
。这导致i
从3开始发生溢出。
溢出有符号整数类型的行为是不确定的。
请注意,这使整个程序行为不确定,这说明了观察到的多行输出(超过10行)。
(如果您选择了10'000'000'000
,则将使用long long
类型对乘法进行求值,并且行为将得到明确定义!)