Является ли вызов clear () для ifstream проблематичным? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть функция, которая читает из файла с фиксированным форматом в цикле, например:

istream.seekg(0, std::ios::begin);
while (istream >> x >> y) {
  // do something
}

Как я обнаружил и как это было хорошо задокументировано здесь после выхода из цикла, eofbit иfailbit установлены.Я хочу иметь возможность перечитать файл снова при следующем вызове функции, не закрывая и не открывая заново ifstream, поэтому, чтобы заставить это работать, я должен сначала добавить istream.clear().Мне кажется странным, что, поскольку в c ++ 11 задокументированное поведение seekg() говорит, что оно очистит eofbit, но оно ничего не делает с failbit, что делает этот аспект seekg() бесполезным для меня,В любом случае, вызов clear() каким-либо образом проблематичным, например, скрытие любых возможных ошибок и т. Д .?

1 Ответ

0 голосов
/ 05 февраля 2019

Сначала позвольте мне быть очень точным в терминологии здесь.Цикл завершается, когда установлен либо плохой бит, либо бит сбоя, но бывает, что когда бит eof установлен, бит сбоя также устанавливается.

Бит bad сигнализирует о более серьезном (невосстановимом)ошибки, поэтому, если вы проверите, что istream.bad() ложно, вызов clear для повторного использования потока должен быть просто в порядке.

...