0

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

while (in >> var)

或者

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

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

while (in)

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

例如,以下工作:

is.setstate(ios_base::eofbit);

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

1 回答 1

2

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

于 2013-11-06T02:34:48.543 回答