前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++标准库流状态一览

c++标准库流状态一览

作者头像
cpp加油站
发布2021-05-14 11:16:35
3410
发布2021-05-14 11:16:35
举报
文章被收录于专栏:cpp加油站
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。

函数原型如下:

代码语言:javascript
复制
//返回当前流状态  
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函数。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 cpp加油站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 流状态说明
  • 2. 流状态操作函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档