簡體   English   中英

為什么cerr輸出比cout更快?

[英]Why cerr output faster than cout?

使用cout需要更多時間來輸出對我不利的語句。 但是使用cerr時,輸出速度更快。 為什么?

只是想幫助:-cout->常規輸出(控制台輸出)-cerr->錯誤輸出(控制台錯誤)

cout是緩沖的,cerr沒有緩沖,因此在大多數情況下,cout應該更快。 (盡管您確實在乎速度,但是C輸出功能(例如printf)往往比cout / cerr快很多)。 cout和cerr是ostream對象。 您可以在它們上調用rdbuf(),以從應用程序內的任意位置獨立地重定向其輸出。 您可以打開網絡套接字,將其包裝在流緩沖區中,然后根據需要重定向到那里。

默認情況下,cout綁定到應用程序的標准輸出。 默認情況下,標准輸出是屏幕。 您可以指導操作系統將stdout重定向到其他位置。 或者它也可以單獨執行-例如,Linux中的nohup實用程序可以。 我認為Windows服務也可以重定向其標准流。

而且,cerr與應用程序的標准錯誤有關。 默認情況下,標准錯誤是屏幕。 您可以再次將stderr重定向到其他位置。 這里的另一個問題是,默認情況下,clog像cout一樣被緩沖,而cerr是單位緩沖的,這意味着它在每次完成輸出操作后自動調用flush()。 這非常有用,因為這意味着如果應用程序隨后直接崩潰,輸出不會在緩沖區中丟失。

如果您運行這樣的程序:yourprog> yourfile

您寫入cout的內容將進入yourfile。 您寫給cerr的內容將顯示在屏幕上。 那通常是一件好事。 我可能不希望您的錯誤消息與程序輸出混合在一起。 (特別是如果您的某些錯誤消息只是警告或診斷內容)。 也可以將cout重定向到1個文件,並將cerr重定向到另一個文件。 這是一個方便的范例:我運行您的程序,將輸出重定向到文件,將錯誤消息重定向到另一個文件。 如果您的程序從main返回0,那么我知道可以處理輸出文件了。 如果返回錯誤代碼,則表示不處理輸出文件。 錯誤文件會告訴我出了什么問題。

參考: -http : //www.tutorialspoint.com/cplusplus/cpp_basic_input_output.htm-http : //cboard.cprogramming.com/cplusplus-programming/91613-cout-cerr-clog.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM