IO对象
- IO对象不能拷贝或者赋值,因此也不能将形参或者返回类型设为流类型
- 通常使用引用传递或者返回流对象。
流的错误状态
管理输出缓冲
导致缓冲刷新的原因
- 程序结束
- 缓冲区满
- 操纵符endl,flush等
- 使用unitbuf、nounitbuf设置流的内部状态。cerr设置为unitbuf,所以所有输出操作都会立即刷新缓冲区。
- 一个输出流可能关联到另一个流,当读写到被关联的流时,会刷新缓冲区。默认情况下cin,cerr都关联到cout,当使用cin读入,或者cerr输出是,都会导致cout缓冲区刷新。
操纵符
endl,输出缓冲区内容和一个换行符,刷新缓冲区
flush,输出缓冲区,刷新,不带多余字符
ends,输入内容和一个空字符,刷新
cout << "hi"<<endl<<"jane";
cout << "hi"<<flush<<"jane";
cout <<"hi"<<ends<<"jane";
分别输出:
1
hi
jane
2
hijane
3
hi jane
关联输入输出流
流成员函数tie完成这个工作,它有两个重载版本。
- 不接受任何参数,返回和它绑定的输出流对象。
- 接受一个ostream指针,将这个输入流关联到这个ostream。
cin.tie(&cout);
ostream* old_tie = cin.tie(nullptr);//cin不喝任何关联
cout << "hello";
int a;
cin >> a;
cin.tie(&cerr);//和cerr关联
cin.tie(&old_tie);//重建关联
文件输入输出
因为fstream是在iostream中派生的,所以只用将io换成fstream就行,open,close 的应用。
文件格式mode
向string流输入输出
也差不多