3

簡単なコード:

std::ifstream file("file.txt");
std::string line;
while(getline(file,line))
  ; //exhaust file

//in this sample code, for simplicity assert that the only possible "fail"
//is EOF (which it will always be under normal circumstances).
assert(!file.fail() || file.eof());

assert(file.peek() == EOF); //does this always hold?

最後のアサートは常に成功しますか?

質問の言い換え: EOF の後の場所も EOF を返しますか?

ドキュメントには、ストリームが ALREADY AT EOF のときに peek() が何をするかが明確に記載されていないため、私の質問です。

4

1 に答える 1

5

標準は次のように述べていpeekます。

戻り値: 特性::eof() (good() が false の場合)。

ストリームの eofbit が設定されると、good()が返されるfalseため、peekが返されtraits::eof()ます。これは、eofbit をクリアする操作 (ストリームのシークなど) を実行しない限り、引き続き発生します。traits::eof()また、failbit または badbit が設定されている場合にも返されます。

注: デフォルトのcharに基づくストリームの場合、traits::eof()は と同じEOFです。

于 2013-02-24T16:36:57.530 に答える