Почему seekg(0) не очищает состояние eof потока?

Я хотел бы знать, если и почему 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
7
задан Martin 16 April 2012 в 10:51
поделиться