2012-09-09 105 views
3

根據定義取自:http://www.cplusplus.com/reference/iostream/ostream/flush/,目前還不清楚爲什麼函數存在,以及您將使用它的目的。爲什麼不在每次寫入流時都調用flush()?簡而言之,flush中的flush()的目的是什麼

+0

緩衝速度比原始吞吐量要快:http://en.wikipedia.org/wiki/Data_buffer。那篇文章中的過山車比喻實際上相當不錯。 – Corbin

+1

@Mysticial:Ewwww! –

+1

令人難忘的難忘... –

回答

22

在所有可能的情況下,flush這個詞來源於你真實需要的。一個馬桶......

所以讓我們嘗試廁所的比喻:

沖洗每一個新的下降放入碗中時間是非常耗時和水完全是浪費。如今每個人都在努力保護環境,這是一個大問題。

那麼你會怎麼做呢?通過將其全部保存並在最後沖洗一次來緩衝它。如果不管什麼原因,當你沒有完成時,你總是可以「過早地」沖洗中間的某個地方。


C++流(除其他外)的工作方式大致相同。爲了減少開銷並提高性能,流會緩存其內容,並且只是定期「刷新」它。這樣做的缺點是你可能會得到像這個問題中的「延遲」行爲:Why does printf not flush after the call unless a newline is in the format string?

所以這就是flush()的用途。允許您覆蓋緩衝區。

+18

我希望我不必用圖片和基準來補充這一點。 – Mysticial

+2

+1「廁所比喻」! (: –

1

每次在硬盤驅動器上寫入一個字符文件效率不高。通過網絡爲每個字符發送數據包效率不高。因此流式傳輸經常被緩存。 flush()只是一種在流式傳輸過程中控制「手動」的方式,必須刷新緩存並且應該真正發送或寫入內容。