- IO类型在三个独立头文件中定义:iostream定义读写控制窗口类型,fstream定义已命名文件的类型,sstream定义则用于存在内存中的string对象
- iostream注意区别头文件与类型,当它作为类型时,由istream和ostream派生而来。
- 对IO类型使用继承有重要的含义:如果函数有基类类型引用形参时,可以给函数传递给其派生类对象。例如当使用&istream做形参时,可以使用ifstream作为对象那调用
- 描述的流类读写是由char类型组成的流
- IO对象不可复制或者赋值。两个意义:只有支持复制的元素类型可以使用vector和其它容器,所以流不能放在容器中。形参或者返回类型不能为流类型,如果需要传递或者返回,则使用指针或是引用 ofstream &print(ofstream &)
- 条件状态:流的状态有good,bad(系统级故障),fail(可恢复错误,例如要求输入整数却输入了字符),eof(遇到文件结束符)
当前的整个条件状态:cin.rdstate() - 输出缓冲区的管理:每个IO对象管理一个缓冲区
- 缓冲区刷新:a.程序正常结束 b.不确定时候,缓冲区已经满了,这样缓冲区在写入下一个字符时会清空c.显示清空endl d.用uintbuf设置流的状态 e.将输入输出关联起来,这样读输入流的时候刷新其关联的输出缓冲区
- 警告:程序崩溃,不会刷新缓冲区,必须保证期待写入的每个输出都确实被刷新了,多用endl
- 交互式操作系统通常确保他们的输入和输出流是绑在一起的
- 文件的输入输出:c++中的文件名,由于历史原因,IO标准库使用的是C风格的字符串而不是C++ string类型。因此文件名可以通过string中的c_str成员转换为C字符串
- 如果程序员需要重复文件流读写多个文件,必须在读另一个文件之前调用clear清除该流的状态。
- 文件流构造函数和open函数都提供了默认实参设置文件模式。与ofstream关联的文件以out模式打开,此时文件会被清空:丢弃掉该文件存储的所有数据。
- 对于ofstream打开的文件,要保存文件中的数据,唯一的方式就是用app模式打开 ofstream appfile("file",ofstream::app)
- 文件模式是文件的属性而不是流的属性。
- 字符串流:stringstream对象的一个常见用法,需要在多种类型数据之间实现自动格式化时可以使用该类型。