好吧,所以我有一些C++ iostreams的问题,感觉很奇怪,但它可能是定义的行为,考虑到MSVC++和G ++都会发生这种情况。为什么整数溢出会导致C++ iostreams错误?
说我有这个程序:
#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;
}