わかりましたので、C++ iostream には非常に奇妙に感じるいくつかの問題がありますが、これは 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;
}