IO对象无拷贝或赋值
由于不能拷贝,我们无法将形参和返回类型设置成流类型,只能使用引用方式传递和返回,且不能是const

条件状态
一旦一个流发生错误,后面都会错误,所以使用时最好使用while循环进行判断
auto old_state = cin.rdstate();//流对象的rdstate成员可以返回iostate值,并赋给old_state
cin.clear();//调用clear函数的无参版本,对所有错误标志位复位
process_input(cin);//使用cin
cin.setstate(old_state);//调用setstate,对给定标志位赋值old_state,进行置位
(练习8.1)

管理缓冲输出
缓冲刷新会导致数据真正写到文件或输出设备,可以使用endl、unitbuf等操作符来显式刷新缓冲区
关联中的流可能会由于关联而刷新,例如cin、cerr与cout关联,读cin和写cerr会导致cout缓冲区刷新
刷新输出缓冲区:
endl插入一个换行,然后刷新缓冲区并输出;flush不插入额外字符,刷新缓冲区并输出;ends插入空格并刷新输出
unitbuf可以使任何输出都立即刷新,nounitbuf可以回到正常的缓冲方式
程序异常终止时,输出缓冲区不会被刷新,会有数停留在缓冲区等待打印

关联输入和输出流
cin与cout是关联的,当使用cin输入一个数,cout会因为关联而刷新
每个流同时最多关联一个流,但多个流可以同时关联一个ostream