zoukankan      html  css  js  c++  java
  • 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的简写版本,它先输出一个换行符,再实现缓冲区的刷新。

  • 相关阅读:
    通用二进制格式安装、编译安装过程(以mysql为例)
    linux:网络
    深圳:软通-运维
    深圳:软通-python
    linux:用户管理
    linux:vim
    深圳:卡莱特-售前/售后服务
    linux:基本指令
    linux:安装
    电脑:磁盘扩容
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12714198.html
Copyright © 2011-2022 走看看