我目前正在从C++ Primer 5th Edition学习C++。由于看似相互矛盾的信息,我对检查流状态的方法的行为感到困惑。在第312页,它指出



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



然后



这是没有意义的,因为任何使用fail()的表达式都应该只知道failbitbadbit(因为它们是构成fail()值的内容),而!fail()等同于badbitfailbiteofbit均为false。

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

最佳答案

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

在通常的事件过程中,尝试读取流的末尾会同时设置eofbitfailbit,这可能是容易犯此错误的一个原因。

10-08 20:02