C++ 几种刷新输出缓冲区方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyaohuqijun/article/details/48815063

一下几种情况会导致缓冲区内容被刷新,即写入到真实的输出设备或者文件:

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

2. 一些不确定的时候,缓冲区可能已满;

3. 使用manipulator 显示属性缓冲区, 比较常用的是endl, flush, ends:

 cout<<"hi"<<endl ;    // 插入换行,同时刷新输出缓冲区  ,end line 所以换行

cout<<"hi"<<ends;      //末尾插入null, 刷新缓存区    ,  end string (const string *), 所以加null

cout<<"hi"<<flush;      // 刷新缓存区,不添加任何数据


4.  使用unitbuf 设置流的内部状态, 适合所有输出都要刷新缓冲区,unitbuf 和nounitbuf 之间的区域每次写完后都刷新流

cout<<unitbuf<<"first"<<"second"<<nounitbuf;

等价于

cout<<"first"<<flush<<"second"<<flush;


5. 使用tie 将输入流和输出流关联起来,  这种情况下,在读输入流时将刷新其关联的输出缓冲区,标准库默认将cout 和cin 绑在一起;

cin.tie(&cout);   // cin 和cout 关联

cin.tie(0);    // 解除该流上已存在的捆绑

没有更多推荐了,返回首页