2016-03-25 71 views
4

我是一個新手到編程,我開始昨天自學,我已經得到的一切,但我坦率地說,不明白沒有人解釋std :: cout << x;和std :: cout << x << std :: endl;?

std::cout << x; 

std::cout << x << std::endl; 

之間的區別這對我來說,我要求保持安全。

+0

對於[進一步閱讀](http://stackoverflow.com/q/213907/5583153) – Nacho

+0

[這是我的回答](http://stackoverflow.com/a/29701830/1938163)也可能有助於理解潛力影響 –

回答

11

endl在流中寫入新行,所以後面的輸出將出現在下一行。它也刷新流的緩衝區,通常爲causing a slow-down

這種沖水意味着99%的時間,endl是一個錯誤,你應該只寫"\n"(或'\n')。當你真的要刷新流,我覺得這是更好地做出明確的通過調用std::flush代替:

std::cout << x << '\n' << std::flush; 

至於運行時的動作推移,這相當於用std::endl,但在以下方面使你的意圖明確,這是顯着優越。

+5

只是一個觀察,可能會幫助一些讀者:如果你想輸出某種提示方式,比如'std :: cout <<「,輸入你的名字:」;',你不需要使用'endl'或'flush',然後再嘗試從'std :: cin'輸入,因爲它們是「綁定」流並自動處理。 –

0

std::endl向流中添加換行代碼並刷新輸出緩衝區,std::cout << x只是打印x。 所以,如果你有一個代碼

cout << 5; 
cout << 5; 

這將是

爲輸出,但如果添加一個endl第一cout輸出將是

我真的建議你是用'\n'它比ENDL好過得多。

+0

「我真的建議你使用'\ n'它比endl好得多」 更好的是什麼?性能?還有什麼? – KABoissonneault

+0

性能還不夠嗎? –

+0

當我得到它是免費的,這是很好的。如果可以引入其他問題,我寧願避免它。儘管說實話,我個人使用'printf'來封裝日誌而不是流 – KABoissonneault

相關問題