14.6 流状态
每个流(istream或osream)都有一个与之相关的状态字,出错和非标准条件都通过适当地设置和检测这个状态字来处理。
14.6.1 什么是流状态
ios_base类中定义了如下枚举结构,用以表示流的状态。
enum Iostate { goodbit=0x0,//没有位设置,操作正常 eofbit=0x1,//到达文件末尾 failbit=0x2,//I/O操作失败,如未能取得预期字符, badbit=0x4,//非法操作 _Statmask=0x7 };
以上述结构中不难看出,eofbit、failbit和badbit状态常量实际上分别对应着状态字的第1、2、3位,当输入输出流出现各种问题时,会自动置eofbit、failbit和badbit中的一个或多个有效,也就是将其在状态字中的对应位被置为1。
只有当3位都为0,即状态字等于goodbit时,才说明一切正常,程序可以使用ios_base提供的共用成员函数检查和设置流的状态,决定要进行的操作。