2015-05-19 51 views
3

據我所知,將std::endl轉換爲std::cout會刷新它。我明白,這種行爲對大多數應用程序都有意義。手動刷新cout只有

我的問題是,我有一些輸出使用多個std::endl's並因此刷新輸出。這對於我的程序的性能來說真的很糟糕,並且由於我跳了很多,所以還導致了很多圖形故障。

所以我的問題是,如果我可以告訴std::cout與下次的沖水等到我明確地調用std::cout.flush()或流std::flushstd::cout
如果這是可能的,我也想知道我可以如何扭轉這種情況,因爲它對我來說並不總是合情合理的。

+1

'std :: endl'是對'std :: ostream :: flush'的明確調用,然後寫入一個換行符。如果你不想'std :: endl'來刷新,不要使用'std :: endl'。 – 0x499602D2

+1

@ 0x499602D2 *「'std :: endl'是對'std :: ostream :: flush'的明確調用,然後寫入換行符」* - 完全相反...... newline * then * flush。 –

回答

6

使用std::cout << '\n'而不是std::endl。這可以避免每行之後刷新。 std::endl將始終刷新,因爲這是它的目的。沒有選項可以禁用該行爲。但是,根本沒有要求使用std::endl

如果要增加標準輸出的緩衝區大小,可以嘗試increase buffer for cout

+0

這可以在一定程度上起作用,但是'cout'被緩衝,並且在緩衝區填滿時最終會自己刷新。 – AndyG

+4

OP只是試圖減少衝洗以提高性能,他並不需要完全消除它。 – Barmar

+1

顯然,如果緩衝區填滿,你必須刷新。沒有辦法避免這種情況。 – b4hand