我目前正在从C ++ Primer第5版学习C ++。我对由于看似有冲突的信息而检查流状态的方法的行为感到困惑。在页312上,它说明
如果设置了
badbit
,failbit
或eofbit
中的任何一个,那么条件 评估该流将失败。
在下一页上,它说s.fail()
是
如果设置了流中的
,则为truefailbit
或badbit
那个
当我们使用流作为条件时执行的代码是 相当于调用
!fail()
。
这没有任何意义,因为使用fail()
的任何表达式都应该只知道failbit
和badbit
(因为那些是fail()
&# 39; s值)然而!fail()
相当于badbit
,failbit
和eofbit
的所有三都是假的。
这些看似矛盾的陈述如何结合在一起?
答案 0 :(得分:2)
第二和第三个陈述是正确的,并且与C ++标准一致。那么,第一个就是一个错误。 fail
,operator bool
和operator !
都不会考虑流的eofbit
状态。只有good
和eof
可以。
在通常的事件过程中,尝试阅读流的末尾会设置eofbit
和failbit
,这可能是导致此错误变得容易的原因之一。