【问题标题】:In simple terms, what is the purpose of flush() in ostream简单来说,ostream中flush()的作用是什么
【发布时间】:2012-09-09 02:20:37
【问题描述】:

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

【问题讨论】:

标签: c++ iostream flush ostream


【解决方案1】:

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

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

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

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


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

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

【讨论】:

  • 我希望我不必用图片和基准来补充这一点。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2014-03-23
    • 2016-10-31
    • 2017-08-10
    • 2015-08-13
    • 2010-11-28
    • 2011-02-01
    相关资源
    最近更新 更多