已经“EOF”ed ifstream上的peek()是否继续返回EOF?

时间:2013-02-24 16:18:31

标签: c++

简单代码:

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?

文档没有清楚地提到当流已经在EOF时peek()的作用,因此我的问题。

1 个答案:

答案 0 :(得分:5)

标准说明peek

  

如果good()为false,则返回:traits :: eof()。

设置了流的eofbit后,good()将返回false,因此peek将返回traits::eof()。除非您执行清除eofbit的操作(例如搜索流),否则这将继续发生。如果设置了failbit或badbit,它也将返回traits::eof()

注意:对于默认的基于char的流,traits::eof()EOF相同。