简单代码:
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()的作用,因此我的问题。
答案 0 :(得分:5)
标准说明peek
:
如果good()为false,则返回:traits :: eof()。
设置了流的eofbit后,good()
将返回false
,因此peek
将返回traits::eof()
。除非您执行清除eofbit的操作(例如搜索流),否则这将继续发生。如果设置了failbit或badbit,它也将返回traits::eof()
。
注意:对于默认的基于char
的流,traits::eof()
与EOF
相同。