函數std::get()
通常在文件結束時設置eofbit
。由於C++ 11 std::unget()
首先清除此位,然後程序取消最後一個字符的讀取。 讓我感到困擾的是,在我到達eof後,unget()
似乎不適合我,它只是清除了一點,但實際上並沒有取消任何東西。對get()
的任何後續調用甚至不會再次設置eofbit
。 這是故意的,我錯過了文檔中的某些東西嗎?C++ get()未設置eof
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
真正困擾我的是不是,它使得回eof爲-1
,但爲什麼不在最後的get()
後面設置eofbit
?