1.
不能拷贝或对IO对象赋值
进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能个是const的。
条件状态
badbit 系统级错误,如不可恢复的读写错误,一旦badbit被置位,流就无法使用了
failbit 可恢复错误,出现这种错误流还可以继续使用
eofbit 流到达了文件结束,此时failbit同样会被置位
goodbit 流未处于错误
缓冲区刷新(数据真正写到输出设备或文件)
endl: 换行并刷新缓冲区
flush: 刷新缓冲区,但不输出任何额外字符
ends: 向缓冲区插入一个空字符,然后刷新缓冲区
如果程序崩溃,输出缓冲区不会被刷新
当一个输入流被关联到一个输出流时,任何试图从输入流读取数据的操作都会先刷新关联的输出流
用tie函数将一个输入流和输出流绑定
cin.tie(&cout);
2.
如果我们定义了一个空文件流对象,可以随后调用open来将它与文件关联起来
对一个已经打开的文件流调用open会失败,并会导致failbit被置位。为了将文件流关联到另外一个文件,必须首先关闭已经关联的文件
文件模式
默认情况下,当我们打开一个ofstream时,文件的内容会被丢弃。阻止一个ofstream清空给定文件内容的方法是同时指定app模式
ofstream app("file2", ofstream::app);
对于一个给定流,每当文件打开时,都可以改变其文件模式