我目前正在从 C++ Primer 5th edition 学习 C++。由于看似相互矛盾的信息,我对检查流状态的方法的行为感到困惑。在第 312 页它指出
如果有任何的
badbit
,failbit
或eofbit
设定,然后一个条件,评估该流将失败。
在下一页,它说s.fail()
是
如果
failbit
或badbit
在流中设置,则为真
然后
当我们使用流作为条件时执行的代码相当于调用
!fail()
.
这是没有意义的,因为任何表达式使用fail()
应该只知道failbit
和badbit
(因为这些是什么弥补fail()
的值),但!fail()
等同于所有3的badbit
,failbit
以及eofbit
是假的。
这些看似矛盾的陈述是如何结合在一起的?
第二个和第三个陈述是正确的并且符合 C++ 标准。那么,第一个根本就是一个错误。既不fail
也不operator bool
考虑流的状态operator !
。eofbit
唯good
且eof
做。
在通常的事件过程中,尝试读取超过流末尾的内容会同时设置 和eofbit
,failbit
这可能是这个错误如此容易犯的原因之一。
归档时间: |
|
查看次数: |
2675 次 |
最近记录: |