在 int 中存储大于 INT_MAX 的数字

Storing number larger than INT_MAX in an int

谁能给我解释一下这种 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。我不明白的是为什么只输入一次那个大数字后,输入"overflows"到其他输入,并打印3次2147483647,然后结束程序。

流提取运算符 >> 注意到您不能流式传输那么大的数字并设置 fail 位,并且 不修改 x.

的值

从该输入流(在本例中为 cin)的后续读取立即失败,因此 x 的值保持不变(在本例中为未定义)。