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库