Недавно я столкнулся с ошибкой в моем программном обеспечении, которая была вызвана объектом stringstream, для которого был установлен флаг EOF, прежде чем я ожидал этого. Хотя мне удалось выяснить, что произошло, я не смог выяснить, почему это происходит. Пример:
stringstream test ("a b");
char temp, temp2;
test >> temp >> temp2;
cout << "eof: " << test.eof() << endl;
При запуске это показывает:
eof: 0
Это результат, который я ожидаю. (Я ожидаю, что поток строк установит флаг EOF в 1, когда я попытаюсь что-то прочитать снова)
Однако, когда я внесу небольшое изменение в приведенный выше пример:
stringstream test ("4 2");
int temp, temp2;
test >> temp >> temp2;
cout << "eof: " << test.eof() << endl;
вывод показывает:
eof: 1
Почему флаг EOF устанавливается в этой ситуации, а не в предыдущей?