C++使用标准库类来处理面向流的输入和输出:
- iostream处理控制台IO
- fstream处理命名文件IO
- stringstream完成内存string的IO
类fstream和stringstream都继承自iostream。
IO类
头文件iostream包含所有i/o流所需的基本信息,并定义有四个标准i/o流对象:
- cin:标准输入流对象(与标准输入设备连接)
- cout :标准输出流(与标准输出设备连接)
- cerr :非缓冲的标准错误流(默认设备为显示器)
- clog :经缓冲的标准错误流(默认设备为打印机)
IO对象没有拷贝或者赋值。
条件状态(P8.1.1,P279)
IO类定义了一些函数和标志,可以帮助我们访问和操纵流的条件状态(condition state)。
| 条件状态 | 含义 |
|---|---|
| strm::iostate | 由各个iostream类定义,用于定义条件状态 |
| strm::badbit | strm::iostate类型的值,用于指出被破坏的流 |
| strm::failbit | strm::iostate类型的值,用于指出失败的IO操作 |
| strm::eofbit | strm::iostate类型的值,用于指出流已经到达文件的结束符 |
| s.eof() | 如果设置了流s的eofbit值,该函数返回true |
| s.bad() | 如果设置了流s的badbit值,该函数返回true |
| s.fail() | 如果设置了流s的failbit值,该函数返回true |
| s.good() | 如果流s处于有效状态,该函数返回true |
| s.clear() | 清空流s的所有状态,并设为true |
| s.clear(flag) | 给流s的某个条件状态位设置为true。flag,类型是strm::iostate |
| s.setstate(flag) | 给流s的添加指定条件。flag,类型是strm::iostate |
| s.rdstate() | 返回流s的当前条件,返回值类型是strm::iostate |
刷新输出缓冲区
endl 操纵符,用于输出一个换行符并刷新缓冲区。flush操纵符,用于刷新流,但不在输出中添加任何字符。ends操作符,这个操纵符在缓冲区中插入空字符null,然后刷新它。
如果程序崩溃(异常终止),输出缓冲区不会刷新。
文件输入输出(8.2,P283)
|
|
文件模式(8.2.2,P286)
文件模式有:in, out, app(append的缩写,追加模式,写操作前定位到文件末尾), ate, trunk(截断文件), binary。
保留
ofstream打开的文件中已有数据的唯一方法:显式地指定app或in模式。
string流(8.3,P287)
标准库定义了三种类型的字符串流:istringstream,由istream派生而来,提供读string的功能。ostringstream,由ostream派生而来,提供写string的功能。stringstream,由iostream派生而来,提供读写string的功能。
stringstream 特定的操作:
| stringstream 特有的操作 | 含义 |
|---|---|
| sstream strm; | strm是一个未绑定的stringstream对象。sstream是头文件sstream中定义的一个类型 |
| sstream strm(s); | strm是一个sstream对象,保存string s的一个拷贝。此构造函数是explict的。 |
| strm.str() | 返回strm所保存的string的拷贝 |
| strm.str(s) | 将string s拷贝到strm中。返回void |
术语表
继承: inheritance
条件状态: condition state
文件模式: file mode
文件流: file stream
字符串流: string stream
参考资料
- C++ Primer 中文第五版
- C++primer第五版第八章学习笔记
- 《C++primer(第五版)》学习之路-第八章:IO库
