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;
}

Ideone Link

您的平台很可能是 32 位 int。所以 1'000'000'000 是一个 int,编译器也会尝试将 i * 1'000'000'000 计算为一个 int。这导致从 i 开始溢出 3。

溢出有符号整数类型的行为未定义。

请注意,这使得 整个程序 行为未定义,这说明了您观察到的多行输出(超过 10 行)。

(如果您选择了 10'000'000'000 say 而不是,那么乘法将使用 long long 类型进行评估,并且行为将被明确定义!)