読者です 読者をやめる 読者になる 読者になる

C++のstd::stringstream#eofの挙動について。

C++にはstd::stringstreamという便利なクラスがあるけど、それのeofメソッドの挙動が思ったとおりでないので備忘録として

予想していた挙動

std::stringstream ss("aaa");

for(int i = 0; i < 3; i++) ss.get(); // 1文字読み出し

ss.eof(); // 文字列の末尾に来たのだからtrueだろう

ss.get() // EOFが返ってくるだろう

ss.eof() // 当然ここはtrueだろう

実際の挙動

std::stringstream ss("aaa");

for(int i = 0; i < 3; i++) ss.get(); // 1文字読み出し

ss.eof(); // 最後に読み出した文字はEOFでないのでfalse

ss.get() // EOFが返ってくる

ss.eof() // ようやくここでtrue

これで軽く2時間くらい悩まされてました、、、