【STL】iostream 编程:缓冲区的作用

【STL】iostream 编程:缓冲区的作用
本文介绍一下缓冲区这个概念着重看一下示例不然在用的时候会有错误的理解。目录1 示例体验缓冲区2 示例清空输出缓冲区3 说明1 示例体验缓冲区下面示例能够直观体现缓冲区带来的效果。按照直观逻辑程序应当先打印 please wait等待 5 秒后再输出剩余内容但实际运行未必如此——根源在于输出带有缓冲区。// effects_buffering.cpp// compile with: /EHsc#includeiostream#includetime.husingnamespacestd;intmain(){time_t tmtime(NULL)5;coutPlease wait...;while(time(NULL)tm);cout\nAll doneendl;}运行结果实际运行效果是在程序运行到 while 循环等待那部分代码的时候并没有立即输出 Please wait 。2 示例清空输出缓冲区想要让程序按预期逻辑运行需要在打印提示文字时强制清空 cout 的缓冲区。清空输出流缓冲区可以使用 flush 操纵符// effects_buffering.cpp// compile with: /EHsc#includeiostream#includetime.husingnamespacestd;intmain(){time_t tmtime(NULL)5;coutPlease wait...flush;while(time(NULL)tm);cout\nAll doneendl;}运行结果这一步会立刻刷新缓冲区保证等待逻辑执行前文字已经打印出来。其他代替方案可以使用 endl 操纵符它会输出换行符并同步刷新缓冲区可以借助 cin 对象默认情况下 cin、cerr、clog 都与 cout 绑定只要执行读取输入或操作 cerr / clog都会自动刷新 cout 的缓冲区。3 说明缓冲机制原理输出内容先存入内存缓冲区攒到一定量、程序结束、主动刷新时才会一次性输出到控制台减少系统调用开销。flush 和 endl 区别flush仅清空缓冲区不输出换行endl输出换行符强制刷新缓冲区绑定 tie 机制cin.tie(cout)每次读取输入前自动刷新 cout避免提示文字卡在缓冲区不显示