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函数。
下面用一张图来总结一下流状态在这两个类里面的关联:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。