【发布时间】:2010-08-27 08:36:15
【问题描述】:
好的,所以我对 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;
}
【问题讨论】:
标签: c++ integer-overflow