1. C++使用标准库类来处理面向流的输入和输出:
iostream 处理控制台IO;
fstream处理命名文件IO;
stringstream完成内存string 的IO;
2. IO对象无拷贝或赋值
3. iostream: 每个输出流管理一个缓冲区,用来保存程序读写的数据;
导致缓冲刷新的原因(数据真正写到输出设备或文件):
1.程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行;
2.缓冲区慢时,需要刷新缓冲,然后新的数据才可以继续写入缓冲区;
3.使用操作符如: endl, ends, flush来显示刷新缓冲区;
4.在每个输出操作后,可以用操作符unitbuf设置流的内部状态,来清空缓冲区。默认情况,对cerr是设置unitbuf的,因此 写 到cerr的内容都是立即刷新的;
5.一个输出流可能 被关联到另一个流,这种情况下,当读写被关联的流时,关联到的流的缓冲区会被刷新。例如,cin和cerr都关联到cout,因此,读cin或写cerr都会导致cout的缓冲区刷新。
操作符endl,ends, flush刷新缓冲区:
endl完成换行并刷新缓冲区;
ends向缓冲区插入一个空字符,然后刷新缓冲区;
flush刷新缓冲区,但不输出任何额外的字符;
测试:
结果:
关联输入输出流:
4. 文件输入输出 : fstream
支持文件IO的三个类型: ifstream; ofstream; fstream.
读写文件模式:
测试代码:
5. string 流 : istringstream; ostringstream; stringstream;
由于是继承自iostream, 所以可以用 << 或 >> 符合来定向输入或输出流到 string流中:
第一行为输入, 可见 >> 符号是按空格当作各项的分割符的。