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

续:

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。

posted @ 2013-05-17 00:25  mzorro  阅读(2385)  评论(0编辑  收藏  举报