一下几种情况会导致缓冲区内容被刷新,即写入到真实的输出设备或者文件:
1. 程序正常结束, 作为main 返回工作的一部分,将情况所有输出缓冲区;
2. 一些不确定的时候,缓冲区可能已满;
3. 使用manipulator 显示属性缓冲区, 比较常用的是endl, flush, ends:
cout<<"hi"<<endl ; // 插入换行,同时刷新输出缓冲区 ,end line 所以换行
cout<<"hi"<<ends; //末尾插入null, 刷新缓存区 , end string (const string *), 所以加null
cout<<"hi"<<flush; // 刷新缓存区,不添加任何数据
4. 使用unitbuf 设置流的内部状态, 适合所有输出都要刷新缓冲区,unitbuf 和nounitbuf 之间的区域每次写完后都刷新流
cout<<unitbuf<<"first"<<"second"<<nounitbuf;
等价于
cout<<"first"<<flush<<"second"<<flush;
5. 使用tie 将输入流和输出流关联起来, 这种情况下,在读输入流时将刷新其关联的输出缓冲区,标准库默认将cout 和cin 绑在一起;
cin.tie(&cout); // cin 和cout 关联
cin.tie(0); // 解除该流上已存在的捆绑
更多关于编程语言, 数据库,算法等精品内容, 请访问 我的个人博客 huqijun.org
个人原创内容, 转载请注明来源!