当前位置: 首页 > news >正文

C++ primer plus 第17 章 输入、输出和文件:刷新输出缓冲区

C++ primer plus 第17 章 输入、输出和文件:刷新输出缓冲区

C++ primer plus 第17 章 输入、输出和文件:刷新输出缓冲区

文章目录

  • C++ primer plus 第17 章 输入、输出和文件:刷新输出缓冲区
  • 17.2.3刷新输出缓冲区


17.2.3刷新输出缓冲区

如果程序使用cout将字节发送给标准输出,情况将如何?由于ostream 类对cout 对象处理的输出进行缓冲,所以输出不会立即发送到目标地址,而是被存储在缓冲区中,直到缓冲区填满。然后,程序将刷新(ush)缓冲区,把内容发送出去,并清空缓冲区,以存储新的数据。通常,缓冲区为512字节或其整数倍。当标准输出连接的是硬盘上的文件时,缓冲可以节省大量的时间。毕竟,不希望程序为发送512个字节,而存取磁盘512次。将512个字节收集到缓冲区中,然后一次性将它们写入硬盘的效率要高得多。
然而,对于屏幕输出来说,首先填充缓冲区的重要性要低得多。如果必须重述消息“Press any key tocontinue”以便使用 512个字节来填充缓冲区,实在是太不方便了。所幸的是,在屏幕输出时,程序不必等到缓冲区被填满。例如,将换行符发送到缓冲区后,将刷新缓冲区。另外,正如前面指出的,多数C++实现都会在输入即将发生时刷新缓冲区。也就是说,假设有下面的代码:

cout <<"Enteranumber:";
float num;
cin >>num;

程序期待输入这一事实,将导致它立刻显示cout消息(即刷新“Enteranumber:”消息),即使输出字符串中没有换行符。如果没有这种特性,程序将等待输入,而无法通过cout消息来提示用户。如果实现不能在所希望时刷新输出,可以使用两个控制符中的一个来强行进行刷新。控制符 fush 刷新缓冲区,而控制符 endl 刷新缓冲区,并插入一个换行符。这两个控制符的使用方式与变量名相同:

cout <<"Hello,good-looking!"<< flush;
cout <<"Wait just a moment,please.<< endl;

事实上,控制符也是函数。例如,可以直接调用ush()来刷新cout缓冲区:flush(cout);
然而,ostream 类对<<插入运算符进行了重载,使得下述表达式将被替换为函数调用

fush(cout):
cout << flush

因此,可以用更为方便的插入表示法来成功地进行刷新。

http://www.lryc.cn/news/414745.html

相关文章:

  • 项目总结2
  • PXE实现自动批量安装部署操作系统
  • Cyber Weekly #18
  • Open Interpreter - 开放解释器
  • “八股文”:程序员的福音还是梦魇?
  • 数据结构第2天作业 8月3日
  • 设计界的新宠:5款热门UI在线设计软件评测
  • github添加ssh密钥,通过ssh方式推送代码
  • Python设计模式 - 抽象工厂模式
  • 【JavaEE初阶】懒汉模式与饿汉模式及指令重排序问题
  • Vue3使用Cascader 级联选择器如何获取值并提交信息
  • Python面试整理-第三方库
  • 电脑添加虚拟网卡与ensp互联,互访
  • 悬而未决:奇怪的不允许跨域CORS policy的问题
  • 索引优化秘籍:SQL Server数据库填充因子的调优艺术
  • ffmpeg 的内存分配架构
  • Vue+live2d实现虚拟人物互动(一次体验叙述)
  • 内联函数的概念和用途以及区别
  • rust 桌面 sip 软电话(基于tauri 、pjsip库)
  • Linux 进程优先级、程序地址空间、进程控制
  • 学习笔记一
  • Linux中信号的发送及信号的自定义捕捉方法
  • yum仓库的制作与使用
  • 牛客周赛54:D.清楚姐姐跳格子(bfs)
  • 用户空间 lmkd
  • 二叉树专题
  • Spring MVC 之简介及常见注解
  • 除了使用本地存储,还有哪些方法可以实现只出现一次的弹窗?
  • 微软蓝屏事件揭示的网络安全深层问题与未来应对策略
  • C#:通用方法总结—第11集