• C++ 输出缓冲区的刷新


    输出缓冲区内容刷新的意思是:输出缓冲区的内容写入到真实的输出设备或者文件。

     
    一、如下几种情况会导致输出缓冲区内容被刷新:
    1、程序正常结束;
    2、缓冲区满(包含正常情况和异常情况);
    3、使用操纵符显式地刷新输出缓冲区,如:endl、ends、flush;
    4、使用unitbuf操纵符设置流的内部状态;
    5、输出流与输入流相关联,此时在读输入流时将刷新其关联的输出流的输出缓冲区。
     
    二、几种操纵符显示刷新输出缓冲区的区别:
    方法
    行为
    cout << "hi!" << endl;
    插入newline,然后刷新输出缓冲区;
    cout << "hi!" << ends;
    插入null,然后刷新输出缓冲区;
    cout << "hi!" << flush;
    直接刷新输出缓冲区;
    三、unitbuf操纵符的使用方法
    unitbuf操纵符在每次执行完写操作后都刷新输出缓冲区,如下两种写法等价:
    写法一:cout << unitbuf << "first" << "second" << nounitbuf;
    写法二:cout << "first" << flush << "second" << flush;
    注:nounitbuf操纵符将流恢复为使用系统默认的输出缓冲区刷新方式。
     
    四、输入和输出绑定在一起
    标准库将cout和cin绑定在一起,语句(cin >> ival;)将导致cout关联的输出缓冲区被刷新。
    使用tie()函数的方法如下:
    cin.tie(&cout);    // 系统默认的将cin和cout绑定在一起
    ostream *old_tie = cin.tie();    // 获取cin绑定的输出流指针
    cin.tie(0);            // 解除cin捆绑的输出流
    cin.tie(old_tie);   // 重新绑定cout
  • 相关阅读:
    Git CMD
    Guava Cache相关
    137.Single Number II---位运算---《剑指offer》40
    SpringMVC数据绑定
    StringUtils工具类的使用
    sql注入
    mapper配置文件中的动态SQL
    json相关注解和序列化与反序列化
    用户模块
    横向越权与纵向越权
  • 原文地址:https://www.cnblogs.com/xiaofeiIDO/p/8573727.html
Copyright © 2020-2023  润新知