在返回流之前执行输入操作是一种惯用的C ++技术。它看起来像这样:
while (in >> var)
或
while (std::getline(in, line))
但是当这两个函数返回时,它们返回对流的引用,结果如下:
while (in)
然后调用operator bool()
来检查!fail()
。这是我的问题。由于!fail()
仅检查failbit
或badbit
而非eofbit
,那么这是如何安全的?如果设置eofbit
或failbit
并且条件仍然通过,则无法在流中设置badbit
吗?
例如,以下作品:
is.setstate(ios_base::eofbit);
if (is)
std::cout << "It works";
答案 0 :(得分:2)
如果到达文件末尾,则设置eofbit
。如果设置了eofbit
,并且尝试了读取操作,则设置failbit
。因此,如果在到达文件末尾后尝试读取操作,则设置failbit
,这解释了为什么“直到文件末尾读取”成语的原因。