Хорошо, у меня есть некоторые проблемы с iostreams C ++, которые кажутся очень странными, но это, вероятно, определенное поведение, учитывая, что это происходит как с 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;
}