Я только что столкнулся с любопытной ситуацией в C ++.Я делал что-то вроде:
istream in;
// ...
in.get(); // get a char (which turns out to be the last)
// curiously ios::eof bit doesn't get set just yet
c = in.peek(); // attempt to peek, return EOF and now set ios::eof bit
if(c == EOF) {
// realize shouldn't have gotten the last char for some reason
in.unget(): // attempt to unget, *fails* (because ios:eof bit was set)
}
Теперь мне любопытно, почему peek устанавливает бит eof;Я нахожу это крайне не интуитивным.Предполагается, что он просто смотрит, не потребляет ничего и не должен изменять состояние потока.Кроме того, почему unget
впоследствии не работает?Стандарт обязывает все операции быть nop, когда good()
ложно или что-то?