C++

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

内容概要: 刷新缓冲区 c++

更多关于C++编程语言的内容,可以查看我的C++专栏. 
对Java,JavaScript,Python等编程语言有兴趣的,也可以看看编程语言 也欢迎大家来论坛与我讨论

刷新缓冲区

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

  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 设置流的内部状态, 适合所有输出都要刷新缓冲区,unitbufnounitbuf 之间的区域每次写完后都刷新流

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

等价于

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

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

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

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top