8 IO库-IO类
一、IO库头文件和类型
| 头文件 | 类型 |
|
iostream (定义了用于读写流的基本类型) |
istream,wistream 从流读取数据; ostream,wostream 向流写入数据; iostream,wiostream读写流 |
|
fstream (定义了读写命名文件的类型) |
ifstream,wifstream 从文件读取数据; ofstream,wofstream 向文件写入数据; fstream,wfstream读写文件 |
|
sstream (定义了读写内存string对象的类型) |
istringstream,wistringstream 从string读取数据; ostringstream,wostringstream 向string写入数据; stringstream,wstringstream读写string |
标准库通过继承机制使我们忽略不同类型流之间的差异。ifstream、istringstream继承自istream所以可以像istream对象一样使用ifstream、istringstream,即均可使用cin;fstream、ostringstream继承自ostream同样可以使用cout。
二、 IO对象无拷贝或赋值
ofstream out1,out2; out1 = out2; //错误,不能对流对象赋值 ofstream print(ofstream); //错误,不能初始化ofstream参数 out2 = print(out2); //错误,不能拷贝流对象
三、IO操作条件状态
因为IO操作容易发生错误,所以IO库定义了操纵流的条件状态。
四、管理输出缓冲区
每个输出流都管理一个缓冲区,用来保存程序读写的数据。
文本可能立即打印出来,也可能被操作系统保存在缓冲区随后打印,有了缓冲机制,操作系统就能将程序的多个输出操作组合成单一的系统级写操作。
1、缓冲区刷新的原因
程序正常结束;
缓冲区慢,需要刷新后新的数据才能写入缓冲区;
使用操作符如endl来显式的刷新缓冲区;
一个输出流可能被关联到另一个流。
2、刷新输出缓冲区
endl完成换行并刷新缓冲区;
flush刷新缓冲区但没有任何额外字符;
ends向缓冲区插入一个空字符,然后刷新缓冲区
3、 unitbuf操纵符
cout << unitbuf; //所有输出操作后都会立即刷新缓冲区 cout <<nounitbuf; //回到正常缓冲方式
4、关联输入流和输出流
当一个输入流被关联到一个输出流时,任何从输入流读取数据的操作都会先刷新关联的输出流。
/*标准库将cout和cin关联在一起*/ cin >> ival; //导致cout缓冲区被刷新
交互式系统通常应该关联输入流和输出流,这意味着所有输出,都会在读操作前被打印出来。
浙公网安备 33010602011771号