这两个条件是否相同?

时间:2013-11-06 02:29:02

标签: c++

在返回流之前执行输入操作是一种惯用的C ++技术。它看起来像这样:

while (in >> var)

while (std::getline(in, line))

但是当这两个函数返回时,它们返回对流的引用,结果如下:

while (in)

然后调用operator bool()来检查!fail()。这是我的问题。由于!fail()仅检查failbitbadbit而非eofbit,那么这是如何安全的?如果设置eofbitfailbit并且条件仍然通过,则无法在流中设置badbit吗?

例如,以下作品:

is.setstate(ios_base::eofbit);

if (is)
    std::cout << "It works";

1 个答案:

答案 0 :(得分:2)

如果到达文件末尾,则设置eofbit。如果设置了eofbit,并且尝试了读取操作,则设置failbit。因此,如果在到达文件末尾后尝试读取操作,则设置failbit,这解释了为什么“直到文件末尾读取”成语的原因。