当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

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

时间:2015/5/19 21:32:16 作者:平凡之路 来源:xuhantao.com 浏览:

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。

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1