好的,所以我对 C++ iostreams 有一些感觉很奇怪的问题,但考虑到 MSVC++ 和 G++ 都会发生这种情况,这可能是已定义的行为。
说我有这个程序:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
cin >> a;
cout << a << endl;
return 0;
}
如果我故意通过给第一个 cin 一个大于 int 的最大限制的值来溢出,所有进一步的调用cin.operator>>()
将由于某种原因立即返回,并a
设置为某个值。该值似乎未定义。
为什么,这种行为记录在哪里?有没有办法确定是否发生了这种溢出?
此外,这个类似的程序似乎可以按我的意图工作。如果我溢出该值,它会给出a
一些值,并继续,就好像溢出从未发生过一样。
#include <cstdio>
using namespace std;
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
return 0;
}