C++ 输出缓冲区的刷新

输出缓冲区内容刷新的意思是:输出缓冲区的内容写入到真实的输出设备或者文件。

 
一、如下几种情况会导致输出缓冲区内容被刷新:
1、程序正常结束;
2、缓冲区满(包含正常情况和异常情况);
3、使用操纵符显式地刷新输出缓冲区,如:endl、ends、flush;
4、使用unitbuf操纵符设置流的内部状态;
5、输出流与输入流相关联,此时在读输入流时将刷新其关联的输出流的输出缓冲区。
 
二、几种操纵符显示刷新输出缓冲区的区别:
方法
行为
cout << "hi!" << endl;
插入newline,然后刷新输出缓冲区;
cout << "hi!" << ends;
插入null,然后刷新输出缓冲区;
cout << "hi!" << flush;
直接刷新输出缓冲区;
三、unitbuf操纵符的使用方法
unitbuf操纵符在每次执行完写操作后都刷新输出缓冲区,如下两种写法等价:
写法一:cout << unitbuf << "first" << "second" << nounitbuf;
写法二:cout << "first" << flush << "second" << flush;
注:nounitbuf操纵符将流恢复为使用系统默认的输出缓冲区刷新方式。
 
四、输入和输出绑定在一起
标准库将cout和cin绑定在一起,语句(cin >> ival;)将导致cout关联的输出缓冲区被刷新。
使用tie()函数的方法如下:
cin.tie(&cout);    // 系统默认的将cin和cout绑定在一起
ostream *old_tie = cin.tie();    // 获取cin绑定的输出流指针
cin.tie(0);            // 解除cin捆绑的输出流
cin.tie(old_tie);   // 重新绑定cout
原文地址:https://www.cnblogs.com/xiaofeiIDO/p/8573727.html