std cerr是ISO C 標準錯誤輸出流

2021-06-26 17:02:39 字數 908 閱讀 2964

1概念

std::cerr是iso c++標準錯誤輸出流,對應於iso c標準庫的stderr。

與std::cout不同,iso c++要求當cerr被初始化後,cerr.flags() & unitbuf非零(保證流在每次輸出操作後被重新整理),且cerr.tie()返回&cout。[1] 即cerr預設和cout同步但無緩衝。

2cerr與cout的區別

cout對應於標準輸出流,預設情況下是顯示器。這是乙個被緩衝的輸出,可以被重定向。

cerr對應標準錯誤流,用於顯示錯誤訊息。預設情況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤訊息可以直接傳送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。一般情況下不被重定向。

例如下面**編譯後生成test.exe

// test.cpp

#include

using namespace std;

int main()

在命令列模式下鍵入下面的命令:   

test >>cout.txt

執行結果是:

在生成的cout.txt檔案中輸出了"hello world---cout" ,

同時在顯示器上輸出了"hello world---cerr" ,

也就是說cout的輸出可以重定向到乙個檔案中,而cerr必須輸出在顯示器上。

3為什麼要用cerr

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

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

所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支援。 緩衝區的目的,就是減少刷屏的次數——比如,你的程式輸出聖經中的一篇文章。不帶緩衝的話,就會每寫乙個字母,就輸出乙個字母,然後刷屏。有了緩衝,你將看到若干句子「同時」就出現在了螢幕上(由記憶體翻新到視訊記憶體,然後重新整理螢幕)。

如何是對,如何是錯

有了對錯,才能分清善惡分明。論語 中孔聖人說過,己所不欲,勿施於人 這麼多年來,嘻嘻哈哈地讀過去,聽過去,再就忘卻掉。從來沒有認真地用世事比照一番,也或許是以往的自己總是在校園裡折騰,尚沒有過多的經歷可言。今年把徐公子勝治的 神遊 重新看了一遍。第119回,是非了然處,善惡自分明 法海說了同樣的道理...

員工錯?公司錯?都沒錯,是中國的軟體環境錯

照講我好像是混事的羅?現在的公司裡面混事的多的去了,我可不是混事的。也不想混事,正因為單位閒,所以才想換工作,國企大多這樣,尤其是在石油行業。不要光看到我們這些打工的混事,現在的公司也精的很,多的是是這樣的公司!有些個公司,明明是招程式設計師,它打著招高程的慌,先把人引過去在說!不是說招高程不做題,...

不知是對還是錯

現在從事技術支援,自己出去一般情況下一周以內解決問題 包括出省 而且沒有客戶反應說不行。他們出去一般要半個月。從效率的角度講 我是正確的,我比較崇尚這個角度。從金錢方面講 我是錯誤的,因為我們每天都有20元的補助,如果在乙個地方可以待很久就可以有多的錢了。人人都說現在是乙個金錢社會,那些老闆們一般情...