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

What is the difference between eof(), fail(), bad(), and good() in C++ streams?

本文关键字:good 区别 什么 fail eof C++ 流中 bad      更新时间:2023-10-16

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

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

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

如果设置了流中的failbitbadbit,则为 true

而那

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

这是没有意义的,因为任何使用fail()的表达式都应该只知道failbitbadbit(因为这些是构成fail()值的东西(,但!fail()等价于badbitfailbiteofbit的所有三个都是假的。

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

第二和第三种说法是正确的,符合C++标准。那么,第一个只是一个错误。failoperator booloperator !都不考虑流的eofbit状态。只有goodeof这样做。

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