博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++输出缓冲区刷新
阅读量:5147 次
发布时间:2019-06-13

本文共 1318 字,大约阅读时间需要 4 分钟。

转载自http://www.2cto.com/kf/201206/137894.html

在c++中,io操作都是有io对象来实现的,每个io对象又管理一个缓冲区,用于存储程序读写的数据。

只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。

那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:

1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。

2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。

3.用操纵符显示地刷新缓冲区,如用endl。

4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。

5.可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区。

我们可以通过以下实例代码来加深一下理解:

[cpp] 
// 操纵符 
cout << "hi!" << flush; // flushes the buffer, adds no data 
cout << "hi!" << ends; // inserts a null, then flushes the buffer 
cout << "hi!" << endl; // inserts a newline, then flushes the buffer 
 
// unitbuf操纵符 
cout << unitbuf << "first" << " second" << nounitbuf; 
 
// unitbuf会在每次执行完写操作后都刷新流 
 
// 上条语句等价于 
cout << "first" << flush << " second" << flush; 
 
// nounitbuf将流恢复为正常的,由管理的缓冲区方式 
 
// 将输入输出绑在一起 
// 标准库已经将cin和cout绑定在一起 
// 我们可以调用tie()来实现绑定 
cin.tie(&cout); // the library ties cin and cout for us 
ostream *old_tie = cin.tie(); 
cin.tie(0); // break tie to cout, cout no longer flushed when cin is read 
cin.tie(&cerr); // ties cin and cerr, not necessarily a good idea! 
cin.tie(0); // break tie between cin and cerr 
cin.tie(old_tie); // restablish normal tie between cin and cout 

 

作者:RO_wsy

 

 

另外附上unitbuf在c++ reference上的解释

http://www.cplusplus.com/reference/ios/unitbuf/

c++ reference is a good tool.

转载于:https://www.cnblogs.com/weili-wu/p/3519277.html

你可能感兴趣的文章
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
Database、User、Schema、Tables、Col、Row
查看>>
ckplayer网页播放器简易教程
查看>>
Android Studio 学习(六)内容提供器
查看>>
作业1:求500到1000之间有多少个素数,并打印出来
查看>>
for循环:用turtle画一颗五角星
查看>>
浅谈JavaScript中的eval()
查看>>
操作系统学习(七) 、保护机制概述
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
MySQL建表语句+添加注释
查看>>
[Leetcode][JAVA] LRU Cache
查看>>
本周内容
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>