定義
std::cerr(console error)是ISO C++標準錯誤輸出流,對應於ISO C標準庫的stderr。
與std::cout不同,ISO C++要求當cerr被初始化後,cerr.flags() & unitbuf非零(保證流在每次輸出操作後被刷新),且cerr.tie()返回&cout。 即cerr默認和cout同步但無緩衝。
區別
cerr對應標準錯誤流,用於顯示錯誤訊息。默認情況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤訊息可以直接傳送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。一般情況下不被重定向。
例如下面代碼編譯後生成test.exe
作用
比如,你的程式遇到調用棧用完了的威脅(無限,沒有出口的遞歸)。
你說,你到什麼地方借記憶體,存放你的錯誤信息?
所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支持。 緩衝區的目的,就是減少刷屏的次數——比如,你的程式輸出聖經中的一篇文章。不帶緩衝的話,就會每寫一個字母,就輸出一個字母,然後刷屏。有了緩衝,你將看到若干句子“同時”就出現在了螢幕上(由記憶體翻新到顯存,然後刷新螢幕)。