zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CMake 3.8.2 Online Manuals
    如何查找UDID
    产品经理那些事儿学习整理笔记
    IOS KVO与NSNotificationCenter简单使用
    整理分享内容
    iOS解决两个静态库的冲突 duplicate symbol
    IOS 添加libMobileVLCKit .a到项目中编译问题
    OpenERP为form和tree视图同时指定view_id的方法
    openerp related字段解读
    openerp图片路径处理
  • 原文地址:https://www.cnblogs.com/xiaofeiIDO/p/8573727.html
Copyright © 2011-2022 走看看