C++ Iostreams 用法详解(三)状态标志位
续:
iostreams中共有四个状态标志位定义在ios_base中,具体如下:
namespace std {
class ios_base {
public:
typedef implementation-defined-bitmask-type iostate;
static const iostate badbit;
static const iostate eofbit;
static const iostate failbit;
static const iostate goodbit;
...
};
}
这四个状态标志位的含义为:
iostate |
含义 |
badbit |
记录流缓冲区的完整性缺失(不可挽回) |
eofbit |
从一个流中提取数据时遇到end-of-file(文件尾) |
failbit |
记录提取有效字段时失败(如输入的类型不满足,可通过清除输入缓冲区来挽回) |
goodbit |
当且仅当上面三种情况都没有发生时有效(保证goodbit的值为0) |
这里先介绍一个读取状态标志位的函数rdstate(),这个函数将读出这四个标志位,返回一个iostate类型。例如当rdstate() & ios::eofbit == 0时,说明在状态标志位中eofbit位并没有被置1,也就是说并没有到文件尾。当然这样去使用状态标志位是非常麻烦的了,还有更简单的方法了,下面这几个函数的用法:
bool ios_base::bad( ) const; | 如果rdstate() & badbit返回非零置则返回true,否则返回false |
bool ios_base::fail( ) const; | 如果rdstate() & (badbit | failbit)返回非零置则返回true,否则返回false |
bool ios_base::eof( ) const; | 如果rdstate() & eofbit返回非零置则返回true,否则返回false |
bool ios_base::fail( ) const; | 如果rdstate() == goodbit(==0)返回非零置则返回true,否则返回false (这个函数是最常用的) |
void ios_base::clear( iostate _State=goodbit, bool _Reraise=false); void ios_base::clear( iostate _State); |
|
以上这些函数是比较常用的,还有一些状态标志位的操作函数如setstate需要了解的可以去查MSDN。
这段时间考试很多,复习比较忙,没什么时间更新。等考完试慢慢来吧。下回书说一下streambuf。