6

根据来自:http ://www.cplusplus.com/reference/iostream/ostream/flush/ 的定义,尚不清楚该功能为何存在,以及您将其用于什么目的。为什么不每次写入流时调用flush()?

4

2 回答 2

28

这个词很可能flush来自你在现实生活中会冲洗的东西。一个厕所...

所以让我们尝试一个厕所类比:

每次有新的放入碗中时冲洗非常耗时并且完全浪费水。这是今天每个人都在努力做到环保的一个大问题。

那么你会怎么做呢?您可以通过将其全部保存并在最后刷新一次来缓冲它。如果出于某种原因,当你没有完成时,你总是可以“过早地”在中间的某个地方冲洗。


C++ 流(除其他外)的工作方式大致相同。为了减少开销并提高性能,流会缓冲其内容并仅定期“刷新”它。这样做的缺点是你可能会得到像这个问题中的“延迟”行为:为什么 printf 在调用后不刷新,除非换行符在格式字符串中?

这就是flush()它的用途。允许您覆盖缓冲。

于 2012-09-09T02:37:54.617 回答
1

每次在硬盘上写入一个字符是低效的。通过网络为每个字符发送一个数据包是低效的。因此流媒体经常被缓存。flush()当必须刷新缓存并且应该真正发送或写入内容时,这只是在流式传输期间“手动”控制的一种方式。

于 2012-09-09T02:34:25.033 回答