简单来说,ostream中flush()的目的是什么

时间:2012-09-09 02:20:37

标签: c++ iostream flush ostream

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

2 个答案:

答案 0 :(得分:25)

很可能,flush这个词恰好来自于你在现实生活中的冲动。厕所......

让我们尝试一下厕所比喻:

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

那你做什么呢?你可以通过保存它来缓冲它并在最后冲洗一次。如果出于某种原因,当你没有完成时,你总是可以“过早地”在中间某处冲洗。


C ++流(以及其他内容)的工作方式大致相同。为了减少开销并提高性能,流缓冲其内容并仅定期“刷新”它。这样做的缺点是你可能会像这个问题一样得到“延迟”行为:Why does printf not flush after the call unless a newline is in the format string?

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

答案 1 :(得分:1)

每次在硬盘驱动器上写入一个字符的文件效率很低。通过网络为每个字符发送数据包效率很低。因此,通常会缓存流式传输。 flush()只是一种在流式传输过程中“手动”控制的方法,当必须刷新缓存并且应该真正发送或写入内容时。