2010-09-30 19 views
0

請有人請解釋一下,究竟是什麼意思?我想了解的是什麼clogcerr之間的差別,差別只在緩衝提前緩衝在iostream

回答

2

感謝當你寫阻塞,那麼你實際上寫的字符在內存中的存儲。當這個商店變滿時,它會寫入實際的流。當流關閉時(會在程序結束時發生),那麼剩下的數據將被寫入流(手動刷新也可能發生)。

隨着cerr,這不會發生。

通常,由於寫入內存比寫入大多數流更快,因此緩衝的效果是整體性能的提高。情況並非總是如此(典型的例子是間接級別導致緩衝區寫入緩衝區寫入緩衝區),但通常這是合理的默認值。然而,結果是在寫入流對象和寫入實際流之間可能存在延遲,這在某些情況下不合適。

想象一下寫入cerr的東西可能需要迅速的動作是合理的,但寫入堵塞的東西不會,因此是不同的。

+0

可以將緩衝區 - >緩衝區 - >緩衝區寫入爲代碼中的邏輯錯誤,因此並不真正相關,因爲錯誤通常不會比正確的代碼更快。 – 2010-09-30 13:39:44

+0

@Martin,如果這些緩衝區全部都是黑盒子,那麼它不是最理想的,但不是不正確的。 – 2010-09-30 13:45:15

1

clog和cerr之間的區別在於clog是完全緩衝的,而輸出到cerr的輸出會在每次格式化後寫入外部設備。對於完全緩衝的流,僅當緩衝區已滿時才寫入輸出到實際外部設備。因此,clog更有效地將輸出重定向到文件,而cerr主要用於終端I/O。在每次格式化之後寫入外部設備,在cerr的情況下寫入終端,用於同步終端的輸出和輸入。另外,預定義的流與其關聯的C標準文件同步。

+0

因此,堵塞是緩衝流和cerr不是,對不對? – hqt 2012-11-15 03:37:09