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

【C++】std::cout与std::cin缓冲区

C++输入输出缓冲区:

由于iostream中的cin和cout设有缓冲区(iostream的每个输出流都管理一个缓冲区,用来保存程序读写的数据),当用户要对外部设备写入或读出数据时,会默认将需输出到流对象的内容先放入缓冲区,并不会立即输出,当缓冲区收到刷新信号时,先将数据写入或读出,然后再刷新缓冲区,即清空缓冲区,进行下一轮的读写操作。

缓冲区接收到什么样的信号才将其视为刷新信号?

1.缓冲区已满,当继续向缓冲区写入数据时,写入/读出缓冲区数据,然后刷新缓冲区,再写入下一个数据

2.执行flush、endl或ends等语句时,假设你cout一段字符串,且字符串长度适合不至于过长,那么当你在每个字符串后不输入endl换行操作,而在全部字符串后输入时,你会发现,在终端上是没有任何的输出的,直到endl执行后,执行换行操作,同时将缓冲队列内容强制输出并清楚缓冲队列。其中,flush刷新缓冲区,但不输出任何额外的字符,而ends向缓冲区插入一个空字符,然后刷新缓冲区

3.程序正常结束时,作为main函数的return操作的一部分,刷新缓冲区

4.通过unitbuf操纵符设置流的内部状态,清空缓冲区。默认情况下,对cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的

5.cin和cout切换时,比如说当你用cin接收,但是你并没有给缓冲区刷新的信号,此时,由于cin和cout的缓冲区是捆绑的,当你紧接着使用cout时,缓冲区则会自动的刷新,进行cout语句的写入


http://www.kler.cn/a/384946.html

相关文章:

  • SpringBoot之定时任务
  • 在PHP中使用UTF-8编码防止乱码需要注意以下几点‌:
  • 全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端
  • 在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码
  • 开放寻址法、链式哈希数据结构详细解读
  • 【java】ArrayList与LinkedList的区别
  • 在鱼皮的模拟面试里面学习有感
  • 【Linux基础IO】文件描述符分配规则 重定向
  • 从0开始学习Linux——文件目录
  • docker安装zookeeper,以及zk可视化界面介绍
  • Me-LLaMA——用于医疗领域的新型开源大规模语言模型
  • 如何在 Vue.js 中优化 Element UI 长文本显示
  • 【9695】基于springboot+vue的学生就业管理系统
  • Instagram 青少年账户:安全新升级
  • 反转链表(Leetcode)
  • 与同行争夺白牌商品市场 京东补贴100亿扶持1万家产业带工厂
  • commonJS | module.exports vs exports
  • 推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
  • 说说webpack proxy工作原理?为什么能解决跨域
  • Docker篇(registry私服)
  • 电路设计中的防接反电路
  • 《我的百科全书》——持续更新
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法
  • 《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
  • git中的gitignore文件
  • PHP+MySQL开发的一套招聘管理系统开发案例源码功能介绍