C++ 中的未定义行为
Undefined Behaviour in C++
我从 facebook post 上得到了这个。这里发生了什么事?查看 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
say 而不是,那么乘法将使用 long long
类型进行评估,并且行为将被明确定义!)
我从 facebook post 上得到了这个。这里发生了什么事?查看 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
say 而不是,那么乘法将使用 long long
类型进行评估,并且行为将被明确定义!)