这两个条件是否等效

Are these two conditions equivalent?

本文关键字:条件 是否 两个      更新时间:2023-10-16

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

while (in >> var)

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

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

while (in)

然后调用operator bool()来检查!fail()。这是我的问题。既然!fail()只检查failbitbadbit而不检查eofbit,那么这如何安全?不能在没有设置failbitbadbit的情况下在流中设置eofbit并且条件仍然通过吗?

例如,以下工作:

is.setstate(ios_base::eofbit);
if (is)
    std::cout << "It works";

如果到达文件末尾,则设置eofbit。 如果设置了eofbit,并尝试读取操作,则设置failbit。因此,如果在到达文件末尾后尝试读取操作,则会设置failbit,这就解释了为什么"读取直到文件末尾"习惯用法有效。