Я хотел бы знать, если и почему seekg(0)
не должен очищать eofbit
потока.
Я нахожусь в точке, когда я уже прочитал весь поток, таким образом, EOF
был достигнут (но failbit
еще не установлен) и хочу вернуться с помощью seekg( )
в правильную позицию и снова прочитать некоторые символы. В этом случае кажется, что seekg(0)
"работает" с набором eofbit
, но как только я пытаюсь прочитать из потока, устанавливается бит ошибки. Это логика, правильная или моя реализация плохая? Должен ли я распознать этот случай и очистить eofbit вручную (если не установлен failbit)?
РЕДАКТИРОВАТЬ:
Следующая программа, предоставленная читателем, дает разные результаты в моей реализации ( mingw32-c++.exe (TDM-2 mingw32) 4.4.1 ):
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::istringstream foo("AAA");
std::string a;
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo.seekg(0);
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 0 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 1
}
Комментарии выше принадлежат пользователю, который пытался эту программу в его реализации. Я получаю следующие результаты:
1 0
1 0
1 1
1 1