zoukankan      html  css  js  c++  java
  • 【C++】cout未刷新缓冲区仍会输出的问题

    众所周知,cout是一个流对象,管理一个缓冲区。当使用<<操作符输出字符串时,字符串不是直接被输出到屏幕上,而是首先被插入到该流的缓存(buffer)中。而只有当缓冲区被刷新时,字符串才会显示在屏幕上。

    一般来说,有以下几种操作会刷新缓冲区:

    • cout被析构
    • 缓冲区满
    • 使用操纵符主动刷新,例如endl,fflush
    • 使用unitbuf操纵符设置流的内部状态,使得每次向流中插入字符都会刷新流
    • 使用cin读取字符串

    但当测试以下代码时:

    #include<iostream>
    using namespace std;
    int main()
    {
        cout<<"aaa";
        while(1);
        return 0;
    }
    

    虽然不满足上述操作中的任何一个,但字符串aaa仍被输出。vs,g++上均是如此。
    经查找资料了解到:当系统空闲时(还有种说法是长时间无输入时)缓冲区会自动刷新。当然这种刷新只是一种“请求”,并不能保证刷新,会不会刷新完全看系统心情_(:3 」∠)_。
    所以,并非未刷新缓冲区就输出了字符串,而是系统比较闲,所以顺手帮你刷新了缓冲区。但要想保证在该输出的地方输出,还是安安心心使用endl或fflush吧。( ̄∇ ̄)

  • 相关阅读:
    9、UmbracoNewsSite:分页
    7、UmbracoNewsSite:新闻详情页
    6、UmbracoNewsSite:添加新闻分类
    5、UmbracoNewsSite:添加css和js文件
    3、UmbracoNewsSite:文档类型设置
    书单
    文章
    Django-rest framework框架
    Django框架
    前端快速入门
  • 原文地址:https://www.cnblogs.com/cknightx/p/6992417.html
Copyright © 2011-2022 走看看