这两个条件相等吗? 在返回流之前进行输入操作是一个习惯性C++技术。它看起来像这样: while (in >> var) while (in)

这两个条件相等吗? 在返回流之前进行输入操作是一个习惯性C++技术。它看起来像这样: while (in >> var) while (in),c++,C++,或 但当这两个函数返回时,它们返回对流的引用,结果如下: while (in >> var) while (in) 然后调用操作符bool(),检查!fail()。这是我的问题。自从!fail()只检查failbit或badbit而不检查eofbit,那么这怎么安全呢?如果未设置failbit或badbit则不能在流中设置eofbit,并且条件仍然通过吗 例如,以下工作: is.setstate(ios_base::eofbit); if (is) std::cout

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

while (in >> var)
while (in)
然后调用
操作符bool()
,检查
!fail()
。这是我的问题。自从<代码>!fail()只检查
failbit
badbit
而不检查
eofbit
,那么这怎么安全呢?如果未设置
failbit
badbit
则不能在流中设置
eofbit
,并且条件仍然通过吗

例如,以下工作:

is.setstate(ios_base::eofbit);

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

std::cout如果到达文件末尾,则设置
eofbit
。如果设置了
eofbit
,并且尝试了读取操作,则设置了
failbit
。因此,如果在到达文件末尾后尝试读取操作,则会设置
failbit
,这解释了“直到文件末尾读取”习惯用法的工作原理。

执行类似
while((in>>var).good())
的操作不是更好吗?这样,整个流状态都会被检查,我们会在点击EOF后尝试读取失败之前返回。@templateboy:这可能会发生两种情况之一。流中保留的数据不足,在这种情况下,
eofbit
failbit
都已设置,并且完全等同于
while(in>>var)
,或者正好有足够的数据成功读入变量并到达文件末尾,在这种情况下,您无法处理最后一段数据(即使你读得很成功)。