<分区>
我从 Facebook 帖子中得到了这个。这里发生了什么事?查看 ideone 中的输出。输出超过 10 行。
代码:
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; ++i)
cout << i*1000000000 << endl;
}
<分区>
我从 Facebook 帖子中得到了这个。这里发生了什么事?查看 ideone 中的输出。输出超过 10 行。
代码:
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; ++i)
cout << i*1000000000 << endl;
}
最佳答案
您的平台很可能有 32 位 int
。所以 1'000'000'000
是一个 int
,编译器将尝试将 i * 1'000'000'000
计算为一个 int
也是。这会导致 i
从 3 开始溢出。
溢出有符号整数类型的行为是未定义的。
请注意,这会导致整个程序 行为未定义,这会导致您观察到多行输出(超过 10 行)。
(如果您选择了 10'000'000'000
而不是说乘法将使用 long long
类型进行计算并且行为将被明确定义!)
关于c++ - C++ 中的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55298078/