C ++中的未定义行为

时间:2019-03-22 10:54:02

标签: c++ undefined overflow

我是从Facebook帖子上得到的。这里发生了什么事?请参阅ideone中的输出。输出超过10行。

代码:

#include<iostream> 
using namespace std;

int main()
{
    for (int i = 0; i < 10; ++i)
        cout << i*1000000000 << endl;
}

Ideone Link

1 个答案:

答案 0 :(得分:3)

您的平台很可能具有32位int。因此1'000'000'000int,编译器也将尝试将i * 1'000'000'000评估为int。这导致i从3开始发生溢出。

溢出有符号整数类型的行为是不确定的。

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

(如果您选择了10'000'000'000,则将使用long long类型对乘法进行求值,并且行为将得到明确定义!)