機能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
ですが、最後にの後にeofbit
を設定しないのはなぜですか? eofbit
とfailbit
について