欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 【C++】std::cout与std::cin缓冲区

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

2025/7/9 9:01:02 来源:https://blog.csdn.net/qq_42761751/article/details/143634834  浏览:    关键词:【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语句的写入

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词