C ++流中的eof(),fail(),bad()和good()有什么区别?

时间:2017-03-29 04:50:23

标签: c++ c++11 io

我目前正在从C ++ Primer第5版学习C ++。我对由于看似有冲突的信息而检查流状态的方法的行为感到困惑。在页312上,它说明

  

如果设置了badbitfailbiteofbit中的任何一个,那么条件   评估该流将失败。

在下一页上,它说s.fail()

  

如果设置了流中的failbitbadbit

,则为true

那个

  

当我们使用流作为条件时执行的代码是   相当于调用!fail()

这没有任何意义,因为使用fail()的任何表达式都应该只知道failbitbadbit(因为那些是fail()&# 39; s值)然而!fail()相当于badbitfailbiteofbit的所有都是假的。

这些看似矛盾的陈述如何结合在一起?

1 个答案:

答案 0 :(得分:2)

第二和第三个陈述是正确的,并且与C ++标准一致。那么,第一个就是一个错误。 failoperator booloperator !都不会考虑流的eofbit状态。只有goodeof可以。

在通常的事件过程中,尝试阅读流的末尾会设置eofbitfailbit,这可能是导致此错误变得容易的原因之一。