根据定义来自:http://www.cplusplus.com/reference/iostream/ostream/flush/,不清楚为什么函数存在,以及用于什么目的。为什么不在每次写入流时调用flush()?
答案 0 :(得分:25)
很可能,flush
这个词恰好来自于你在现实生活中的冲动。厕所......
让我们尝试一下厕所比喻:
每次新的水滴落入碗中时冲洗是非常耗时的并且完全浪费水。今天这是一个大问题,每个人都在努力保护环境。
那你做什么呢?你可以通过保存它来缓冲它并在最后冲洗一次。如果出于某种原因,当你没有完成时,你总是可以“过早地”在中间某处冲洗。
C ++流(以及其他内容)的工作方式大致相同。为了减少开销并提高性能,流缓冲其内容并仅定期“刷新”它。这样做的缺点是你可能会像这个问题一样得到“延迟”行为:Why does printf not flush after the call unless a newline is in the format string?
这就是flush()
的用途。允许你覆盖缓冲。
答案 1 :(得分:1)
每次在硬盘驱动器上写入一个字符的文件效率很低。通过网络为每个字符发送数据包效率很低。因此,通常会缓存流式传输。 flush()
只是一种在流式传输过程中“手动”控制的方法,当必须刷新缓存并且应该真正发送或写入内容时。