[英]Does std::endl << std::flush have a purpose?
std::flush
就在我正在查看的遺留代碼中使用了std::endl
之后。 當我第一次看到這個時,我的想法是看到std::endl
和std::flush
的描述是多余的:
http://en.cppreference.com/w/cpp/io/manip/endl
http://en.cppreference.com/w/cpp/io/manip/flush
以下是我在遺留源代碼中看到的示例:
std::cout << "Generic Notification" << std::endl << std::flush;
但是,由於許多高級軟件開發人員多年來都看過這個代碼,我想知道是否有一些我遺漏的細節。 在std::endl
之后有一個std::flush
目的嗎?
它沒有任何目的。
如果我不得不推測為什么遺留代碼包含這些行,那么有一些可能性,從(我認為是)最可能的場景開始:
std::flush
的顯式調用,而高級開發人員並不認為這是一個需要修復的問題 std::endl
實現沒有觸發刷新,這意味着你的高級開發人員(正確地)理解它是必要的 std::endl
來觸發刷新 std::endl
的行為。 在符合標准的環境中, std::flush
在此代碼中沒有任何用處。
寫這篇文章的人要么沒有完全理解std::endl
的語義,要么正在解決其編譯器或執行環境的某些限制。
我將添加到其他有效的答案,很多時候,沒有為任何一個好的目的std::flush
也不會std::endl
。
基本上, std::endl
=啟動一個新行+刷新流。 但是,很多人傾向於用std::endl
來結束他們的行,因為它“聽起來std::endl
” - 結束了這一行。 但實際上我們很少需要刷新輸出流。 有時我們這樣做(例如,當我們期望用戶對字符串的回復時,或者以最小延遲監視我們的輸出很重要) - 但這是例外,而不是規則。
所以,它可能需要一些習慣,但我們應該默認為:
std::cout << bunch_of_stuff << '\n';
就是這樣!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.