Я думал, что если cin
войдет в состояние ошибки, переменная, в которую она втекает, остается неизменной. Однако, похоже, контрпример:
#include <iostream>
using namespace std;
int main()
{
cout << "Enter int: ";
int i = 5;
cin >> i;
if(cin.fail()) cout << "failed \n";
cout << "You entered: " << i << "\n";
}
Бег:
Enter int: g
failed
You entered: 0
Куда я пошел так плохо?
Поведение изменилось в С++ 11. Сбой целочисленного извлечения теперь устанавливает переменную в 0.
GCC 4.8 демонстрирует новое поведение даже без -std=c++11
, что, вероятно, является ошибкой/ограничением библиотеки. Там только один libstdc++, и он не знает, какие флагов компилятора были использованы для компиляции main
.