2014-03-13 146 views
1

我想知道每次使用cout時輸出緩衝區是否自動刷新和清空。 如果沒有刷新,有什麼辦法可以「檢查輸出緩衝區的內容」嗎? 我指的是您只使用cout而不涉及endl的情況。使用cout時輸出緩衝區是否自動刷新?

考慮下面的代碼:

cout << "Hello, how are you?"; //Without using endl 

我用字符串流檢查如何沖洗影響緩衝。我有以下代碼,但爲什麼輸出仍顯示「GoodDay」,即使我已經刷新了它?

string str; 
stringstream ss; 
ss << "GoodDay"; 
ss << flush; 
ss >> str; 
cout << str; 
+0

如果您使用'std :: endl'或寫入更多的緩衝輸出實際上可以容納,它是刷新是的。至於你關於檢查內容的問題,可能會看看['std :: ios_base :: register_callback'](http://en.cppreference.com/w/cpp/io/ios_base/register_callback)是有用的。 [我的答案在這裏](http://stackoverflow.com/questions/22263636/fstream-c-automatic-line-addition/22263699#22263699)也可能會給你一些見解。 –

+0

因此,如果我不使用std :: endl,並且不要寫超過緩衝輸出可以容納的數據,那麼當我使用cout時,輸出緩衝區是否仍然會被刷新?感謝您的回覆。 – user3347939

+0

_'當我使用cout時,輸出緩衝區仍然會被刷新嗎?'_Nope ... –

回答

0

stringstream不應該在flush上丟失其內容。事實上,flush操作符對串流沒有任何意義,因爲任何輸入都會立即寫入由stringstream封裝的緩衝區。這就是爲什麼你仍然看到「GoodDay」。