cerr、clog、cout的區別
cerr是直接到輸出裝置。
clog是輸入記憶體緩衝區但是不到輸出裝置。
cerr與cout的主要區分就是,cout輸出的資訊可以重定向,而cerr只能輸出到標準輸出(顯示器)上。
例如下面程式編譯後生成test.exe
// test.cpp
#include <iostream.h>
int main()
{
cout << "hello world---cout" << endl ;
cerr << "hello world---cerr" << endl ;
return 0;
}
在命令列模式下鍵入下面的命令:
test >>cout.txt
執行結果是:
在生成的cout.txt檔案中輸出了"hello world---cout"
同時在顯示器上輸出了"hello world---cerr"
也就是說cout的輸出可以重定向到一個檔案中,而cerr必須輸出在顯示器上。
clog流也是標準錯誤流,作用和cerr一樣,區別在於cerr不經過緩衝區,直接向顯示器輸出資訊,而clog中的資訊存放在緩衝區,緩衝區滿或者遇到endl時才輸出.
對於為什麼有cerr和clog
比如,你的程式遇到呼叫棧用完了的威脅(無限,沒有出口的遞迴)。
你說,你到什麼地方借記憶體,存放你的錯誤資訊?
所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支援。
緩衝區的目的,就是減少刷屏的次數——比如,你的程式輸出聖經中的一篇文章。不帶緩衝的話,就會每寫一個字母,就輸出一個字母,然後刷屏。有了緩衝,你將看到若干句子“同時”就出現在了螢幕上(由記憶體翻新到視訊記憶體,然後重新整理螢幕)。