根据从http://www.cplusplus.com/reference/iostream/ostream/flush/所提供的定义,很难理解为什么要存在这个函数,以及何时使用它。为什么不在每次写入流时都调用flush()呢?
很有可能,“flush”这个词来源于现实生活中你要冲洗的东西,比如厕所...那么让我们用一个厕所类比来解释:每次新的东西落到马桶里时都冲一次是非常费时间和浪费水的。这在今天每个人都在努力环保的情况下是个大问题。所以你可以通过将它们全部保存起来,并在最后一次性地冲洗来缓冲它们。如果出于任何原因,在未完成的情况下你也可以随时“过早地”在中途冲洗一次。 C++流(等其他内容)的工作方式基本相同。为了降低开销并提高性能,流会缓存其内容并定期“刷新”它。缺点是你可能会遇到“延迟”行为,就像在这个问题中一样:为什么printf调用后不会刷新,除非格式字符串中有换行符?。所以这就是为什么要使用 flush():允许你覆盖缓冲。