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

    xiaoxiao2021-12-14  23

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

    声明:

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

    正文

    IO

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

    iostream头文件

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

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

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

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

    流的状态

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

    一个类型

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

    四个流状态函数

    s.rdstate() 返回流的当前状态,类型为iostates.setstate(flags) 设置流的状态,flags的类型为iostates.clear(flags) 将给定位的状态复位,flags的类型为iostates.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";

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

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

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

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

    可以使用tie函数设定关联

    转载请注明原文地址: https://ju.6miu.com/read-968032.html

    最新回复(0)