c ++ get()没有设置eof

时间:2017-05-01 14:11:02

标签: c++ c++11

函数List<List<DataType>>通常在文件末尾设置std::get()。由于c ++ 11 eofbit首先清除此位然后执行以取消最后一个字符读取。 令我感到困扰的是,在我到达eof后,std::unget()似乎对我不起作用,它只是清除了一点但实际上并没有取消任何东西。对unget()的任何后续调用甚至都不会再次设置get()。 这是故意的,我是否遗漏了文档中的内容?

gcc版本6.3.1,-std = c ++ 11

eofbit

示例输入#include <iostream> using namespace std; int main () { while ( !cin . eof () ) cout << " " << cin . get () << " "; cout << "end" << endl; cout << cin . eof () << endl; cout << (bool)cin . unget () << endl; cout << cin . eof () << endl; cout << cin . get () << endl; cout << cin . eof () << endl; return 0; }

示例输出

foobar

真正困扰我的不是它为eof取消 102 111 111 98 97 114 10 -1 end 1 0 0 -1 0 ,而是为什么它不会在最后-1之后退回eofbit

1 个答案:

答案 0 :(得分:3)

关于eofbitfailbit

  

到达文件结尾设置eofbit。但请注意操作   到达文件结束时,如果这样做,也可以设置failbit   失败(因此设置了eofbit和failbit)。

关于get()

  

读取一个字符并返回(如果可用)。否则,返回   Traits :: eof()并设置failbit和eofbit。

Unget会清除eofbit,但无法对failbit执行任何操作,因此也会失败。由于设置了get而导致failbit的后续调用失败,因此无法检查下一个字符,因此他们无法设置eofbit