《C++ Primer》读书笔记-第八章 01 IO类

作者:马志峰
链接:https://zhuanlan.zhihu.com/p/24100020
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:

  • 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
  • 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
  • 本文仅作学习交流使用,禁止任何形式的转载

正文

IO

  • 设备IO
    • iostream头文件
    • fstream头文件
  • 内存IO
    • sstream头文件

iostream头文件

  • istream, wistream 从流读取
  • ostream, wostream 向流写入
  • iostream, wiostream 读写

另外两个有类似的结构,三者之间存在继承关系

IO对象作为形参或返回类型时,通常使用非const引用类型,因为:

  1. IO对象不允许拷贝
  2. 读写一个IO对象会改变其状态,因此不能是const

流的状态

  • 一个类型
  • 四个数据成员
  • 四个流状态函数
  • 四个位状态函数

一个类型

strm::iostate 是一种类型,用来表达流的状态,支持位运算

四个流状态函数

  • s.rdstate() 返回流的当前状态,类型为iostate
  • s.setstate(flags) 设置流的状态,flags的类型为iostate
  • s.clear(flags) 将给定位的状态复位,flags的类型为iostate
  • s.clear() 复位所有

四个数据成员

表示四种不同的流状态,分别是iostate中的某一位

  • strm::badbit 表示流崩溃
  • strm::failbit 表示IO操作失败
  • strm::eofbit 表示到达文件尾
  • strm::goodbit 表示流未出错

四个位状态函数

获取对应位的状态

  • s.eof()
  • s.fail()
  • s.bad()
  • s.good()

对于前三个来说,若对应位被置位,则返回true
对于good()来说,若流处于有效状态,则返回true

示例

cin.clear( cin.rdstate() & ~cin.failbit & ~cin.badbit );

复位failbit和badbit,其他位不变

while( cin>>num ){}

while循环检查>>表达式返回的流的状态,流保持有效状态时,条件为真

int num;  
cin >> num;

期望读入一个整数,若输入“Boo”,遇到字符B时流就进入了错误状态,后面的输入都会失效

管理输出缓冲

每个输出流都管理一个缓冲区, 用来保存程序读写的数据

os<<"xxx";

字符串有可能立即打印,也有可能被保存到缓冲区随后打印

下列情况下,缓冲区将被强制刷新

  1. 程序结束
  2. 缓冲区满
  3. endl或其它操纵符
  4. os<<unitbuf,设置后的流不再缓冲,直接输出
  5. 关联流
  • endl 插入换行符并刷新缓冲区
  • ends 插入空字符并刷新缓冲区
  • flush 刷新缓冲区

标准库中的cin和cout是关联在一起的,使用cin时将导致cout的缓冲区被刷新

可以使用tie函数设定关联

猜你喜欢

转载自blog.csdn.net/qq_26751117/article/details/53442420
今日推荐