您的位置:首页 > 编程语言 > C语言/C++

C++ Iostreams 用法详解(三)状态标志位

2013-05-17 00:25 363 查看
续:

C++ Iostreams 用法详解(一)整体把握

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);

这个函数会将标志位设置为_State参数,默认下时goodbit,即清除标志位。后面一个参数_Reraise是指示是否重新抛出异常,不需要时置为false

以上这些函数是比较常用的,还有一些状态标志位的操作函数如setstate需要了解的可以去查MSDN。

这段时间考试很多,复习比较忙,没什么时间更新。等考完试慢慢来吧。下回书说一下streambuf。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: