在int

时间:2016-05-31 17:32:26

标签: c++ integer integer-overflow

有人可以向我解释这个C ++行为吗?

for (int i=0;i<3;++i){
    int x;
    std::cin >> x;
    std::cout << x << std::endl;
}

如果我只输入一个大于INT_MAX的数字(如124124124124124),则输出:

2147483647
2147483647
2147483647 

我最好的猜测是,它识别我的输入是一个数字,但是因为x最多只能容纳2147483647,所以它会被切片。我不明白为什么在输入那个只有ONCE的大数字后,输入“溢出”到其他输入,并打印2147483647三次,然后结束程序。

1 个答案:

答案 0 :(得分:5)

流提取运算符>>指出您无法在该数字中流式传输并设置fail位,并且不会修改 {{1}的值}}

从该输入流(在这种情况下为x)的后续读取会立即失败,因此cin的值保持不变(在这种情况下,未定义)。