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?

文档没有清楚地提到当流已经在 EOF 时 peek() 做了什么,所以我的问题是。

4

1 回答 1

5

该标准说peek

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

当流的 eofbit 设置时,good()将返回false,因此peek将返回traits::eof()。这将继续发生,除非您执行清除 eofbit 的操作(例如寻找流)。traits::eof()如果设置了故障位或坏位,它也会返回。

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

于 2013-02-24T16:36:57.530 回答