天天看點

cerr與cout差別

語言:C++

一、簡介

平常常會用的主要有三個:cout、cerr、clog,首先簡單介紹下三者。

這三者在C++中都是标準IO庫中提供的輸出工具(至于有關的重載問題在此不讨論):

cout:寫到标準輸出的ostream對象;

cerr:輸出到标準錯誤的ostream對象,常用于程式錯誤資訊;

clog:也是輸出标準錯誤流(這點兒和cerr是一樣的),平時很少用到這個

二、差別

具體在輸出的時候,三者是有差別的:

1、cout經過緩沖後輸出,預設情況下是顯示器。這是一個被緩沖的輸出,是标準輸出,并且可以重新定向(關于重新定向的意思還沒明白);

2、cerr不經過緩沖而直接輸出,一般用于迅速輸出出錯資訊,是标準錯誤,預設情況下被關聯到标準輸出流,但它不被緩沖,也就說錯誤消息可以直接發送到顯示器,而無需等到緩沖區或者新的換行符時,才被顯示。一般情況下不被重定向

對于為什麼有cerr和clog

  比如,你的程式遇到調用棧用完了的威脅(無限,沒有出口的遞歸)。

  你說,你到什麼地方借記憶體,存放你的錯誤資訊?

  是以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支援。

  緩沖區的目的,就是減少刷屏的次數——比如,你的程式輸出論語中的一篇文章。不帶緩沖的話,就會每寫一個字母,就輸出一個字母,然後刷屏。有了緩沖,你将看到若幹句子“同時”就出現在了螢幕上(由記憶體翻新到顯存,然後重新整理螢幕)。