【发布时间】:2017-05-01 14:11:02
【问题描述】:
函数std::get() 通常在文件末尾设置eofbit。由于 c++11 std::unget() 首先清除该位,然后继续取消读取最后一个字符。
让我感到困扰的是,在我到达 eof 之后,unget() 似乎对我不起作用,它只会清除该位,但实际上并没有得到任何东西。对get() 的任何后续调用甚至都不会再次设置eofbit。
这是故意的吗,我是否遗漏了文档中的某些内容?
gcc 版本 6.3.1,-std=c++11
#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
示例输出
102 111 111 98 97 114 10 -1 end
1
0
0
-1
0
真正困扰我的不是将-1 放回eof,而是为什么在最后一个get() 之后不放回eofbit?
【问题讨论】: