我目前正在从C++ Primer 5th Edition学习C++。由于看似相互矛盾的信息,我对检查流状态的方法的行为感到困惑。在第312页,它指出
在下一页上,它说s.fail()
是
然后
这是没有意义的,因为任何使用fail()
的表达式都应该只知道failbit
和badbit
(因为它们是构成fail()
值的内容),而!fail()
等同于badbit
,failbit
和eofbit
均为false。
这些看似矛盾的陈述如何融合在一起?
最佳答案
第二和第三条陈述正确无误,并与C++标准一致。那么,第一个仅仅是一个错误。 fail
,operator bool
或operator !
都不考虑流的eofbit
状态。仅good
和eof
可以。
在通常的事件过程中,尝试读取流的末尾会同时设置eofbit
和failbit
,这可能是容易犯此错误的一个原因。