1. 流状态阐明

c++规范库对于流定义了一套它本人的状态变动规定,在ios_base.h申明的ios_base类中,它定义了一个枚举类型_Ios_Iostate来示意流状态,次要有以下四种:

状态阐明
badbit在输入输出时遇到了零碎级谬误,会置为badbit
eofbit读取文件时读到了文件开端,就会置为eofbit
failbit往流缓冲区写入或者读取数据产生谬误时,会被置为failbit
goodbit下面三种都没有时,就是goodbit

另外ios_base另外定义了一个爱护成员iostate _M_streambuf_state;来示意以后流的状态。

2. 流状态操作函数

对于流状态操作函数,是定义在类basic_ios类中,它是ios_base的派生类,位于头文件basic_ios.h中,这里不探讨basic_ios类的应用,只阐明它外面定义的状态操作函数.

阐明:枚举类型_Ios_Iostate取了个别名,叫iostate。

函数原型如下:

//返回以后流状态  iostate  rdstate() const  { return _M_streambuf_state; }//默认革除所有异样状态,置为goodbit  void  clear(iostate __state = goodbit);//在以后流状态根底上依据传入状态进行追加  void  setstate(iostate __state)  { this->clear(this->rdstate() | __state); }//如果以后状态是goodbit,那么返回true,否则返回false  bool  good() const  { return this->rdstate() == 0; }//如果以后流状态是eofbit,那么返回true,否则返回false  bool  eof() const  { return (this->rdstate() & eofbit) != 0; }//如果以后流状态是failbit,那么返回true,否则返回false  bool  fail() const  { return (this->rdstate() & (badbit | failbit)) != 0; }//如果以后流状态是badbit,那么返回true,否则返回false  bool  bad() const  { return (this->rdstate() & badbit) != 0; }

所以如果咱们想被动的设置流状态,能够应用setstate函数,想革除所有异样状态,能够应用clear函数,想判断以后流状态是否失常,就应用good函数。

上面用一张图来总结一下流状态在这两个类外面的关联: