一、IO类
IO库类型和头文件
头文件 | 类型 |
iostream | istream 从流中读取数据 ostream 向流写入数据 iostream 读写流 |
fstream | ifstream 从文件中读取数据 ofstream 文件写入数据 fstream 读写文件 |
sstream |
istringstream 从string读取数据 ostringstream 向string写入数据 stringstream 读写string |
由于ifstream 和istringstream都继承自istream。因此我们可以像使用istream对象一样来使用ifstream和istringstram对象。
(继承:程序设计功能,令一个类型可以从另一个类型继承接口。)
eg: ostringstream out1;
string test(4,‘r’);
out1 << test <<endl; //可以向ostringstream对象写入string数据
IO对象无拷贝或赋值
注意:因为我们不能对IO对象进行拷贝或者赋值操作
因此以下操作一定要避免
1. 将流类型设置为形参或者返回类型
2.传递和返回流的引用不能是const的(读写IO对象就会改变其状态)
条件状态
定义:可以被任何流类使用的一组标志和函数,用来指定给定流是否可用。
IO库条件状态
strm::iostate | strm是一种IO类型,提供表达条件状态的完整功能 |
strm::badbit | 指出流已经崩溃 |
strm::failbit | 指出一个IO操作失败了 |
strm::eofbit | 用来指出流已经到达文件尾 |
strm::goodbit | 用来指出流位处于错误状态 |
s.eof() | 若流s, eofbit置位,返回true |
s.fail() | 若流的failbit,bad置位,返回true |
s.bad() | bad位置位,返回true |
s.good() | 若流处于有效状态,返回true |
s.clear() | 将流s中所有条件状态位复位,流的状态设置为有效 |
s.clear(flag) | 根据给定娥fl复位ags标志位,将流s中对应条件状态复位 |
s.setstate(flags) | 根据给定娥fl复位ags标志位,将流s中对应条件状态置位 |
s.rdstate | 返回流s的当前条件状态,返回值类型位strm:iostate |
输出缓冲区
每个输出流都管理一个缓冲区,用来保存程序读写的数据。
eg: os << "ok";
文本字符串可能立即打印出来,但也有可能被操作系统保存在缓冲区内,随后再打印。
好处:设备的写操作很费时,如果操作系统将多个输出操作组合为一个单一的设备写操作可以带来很大的性能提升。
刷新输出缓冲区的操作
cout << "hi" << endl; //输出一个hi 换行 后刷新
cout << "hi" << flush;//输出 “hi” 后刷新
cout << "hi" << ends;//输出 “hi” 空字符 后刷新
unitbuf
执行cout << unitbuf 所有输出操作后都会立即刷新缓冲区
执行cout << nounitbuf 回到正常的缓冲方式