关于c++:c标准库流状态一览

8次阅读

共计 1067 个字符,预计需要花费 3 分钟才能阅读完成。

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 函数。

上面用一张图来总结一下流状态在这两个类外面的关联:

正文完
 0