cout如何刷新缓冲区

#include<iostream>
#include<cstdlib>
usingnamespace std;
int main()
{
    cout<<"b";
    system("PAUSE");
    return 0;    
}



为什么程序没有结束,也没有用endl,flush刷新缓冲区,b照样能输出呢?

cout<<"b"; 就是向 stdout 输出 "b"; 不需要等待

endl 是 输出 '\n' 再调 flush.
flush 是 清缓冲区。
通常,清缓冲区 用于 清输入缓冲区,而不是输出缓冲区。

只有在编译程序时,要求优化。例如 频繁循环输出,和 频繁循环交替输入输出 情况下,会不及时输出,而是等到缓冲区有一定数容量内容时再输出。这种情况下,才用endl 或 flush 迫使 程序及时输出。

cout 这是一个流对象而已,没有刷新的功能
是endl 有这个功能
它不但实现了换行操作,而且还对输出缓冲区进行抄刷新。什么意思呢?原来在执行输出操作之后,数据并非立刻传到输出设备,而是先进入一个缓冲区,当适宜的时机(如设袭备空闲)后再由缓冲区传入,也可以通过操纵符flush进行强制刷新:
cout << "Hello, World! " << "Flush the screen now!!!" << flush;
这样当程序执行到operator<<(flush)之前,有可能前面知的字符串数据还在缓冲区中而不是显示在屏幕上,但执行operator<<(flush)之后,程序会强制把缓冲区的数据全部搬运到输出设备并将其清空。道而操纵符endl相当于<< "\n" << flush的简写版本,它先输出一个换行符,再实现缓冲区的刷新。

posted @ 2020-04-16 17:17  XXXSANS  阅读(1730)  评论(1编辑  收藏  举报