cout和cerr的區別

2021-09-12 05:36:07 字數 1203 閱讀 2075

問題:

c++中輸出通常資訊的函式為cout,比如:std::cout << "hello world";

在異常處理機制中則使用cerr來輸出錯誤資訊,比如:std::cerr << "error: too many arguments\n";

那麼,cout和cerr的區別是什麼呢?

解決辦法:

1. 摘錄一段《c++ primer》第五版p319中關於cout與cerr的區別的描述:

和cout一樣,cerr也是乙個ostream物件。

它們之間的區別在於:

重定向操作只影響cout,而不影響cerr;

cerr物件僅用於錯誤訊息。

因此,如果將程式輸出重定向到檔案,並且發生了錯誤,則螢幕上仍然會出現錯誤訊息。

在unix系統中,可以分別對cout和cerr進行重定向,命令列操作符》用於對cout進行重定向,操作符2>對cerr進行重定向。

因為,系統的shell裡一般約定1為正確流,2為錯誤流。而1是作為預設值使用可以省略不寫。

2. 示例**:

# test_cerr.cpp

#include using namespace std;

int main()

編譯test_cerr.cpp:

g++ test_cerr.cpp -o test_cerr
執行不同的重定向命令:

u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ ./test_cerr 2> test_cerr.txt

hello world---cout

u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ ./test_cerr > test_cout.txt

hello world---cerr

u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ cat ./test_cerr.txt

hello world---cerr

u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$ cat ./test_cout.txt

hello world---cout

u1204@u1204-zhw:~/wrk/tmp/cpp_src/cpp_exer$

cerr和cout的區別

std cerr是標準錯誤輸出流,不需要快取,直接顯示在顯示器上,而且只能顯示到顯示器上,即std cerr流不能轉向。std cout需要緩衝區 目的是為了減少螢幕重新整理次數,一次全部顯示 std cout流可以轉向,例如可將cout流流向檔案操作中去。1.區別 cout對應於標準輸出流,預設情...

C 中cout和cerr的區別

之前一直在用,但就是沒在意兩者到底有啥卻別,今天又想到這個問題,總結下吧 以下的內容均是本人從網上查閱資料看來整理的,暫時還沒有查閱官方資料,不保證準確,歡迎討論 其實大家平常常會用的主要有三個 cout cerr clog,首先簡單介紹下三者。這三者在c 中都是標準io庫中提供的輸出工具 至於有關...

c 中cout和cerr的區別

其實大家平常常會用的主要有三個 cout cerr clog,首先簡單介紹下三者。這三者在c 中都是標準io庫中提供的輸出工具 至於有關的過載問題在此不討論 cout 寫到標準輸出的ostream物件 cerr 輸出到標準錯誤的ostream物件,常用於程式錯誤資訊 clog 也是輸出標準錯誤流 這...