RT,我看了C++primer,可這個問題還是不是很清楚,清大家幫個忙,謝謝!
12 个解决方案
cout寫入標准輸出
cerr 錯誤輸出 一般用來提示錯誤的
cerr是用於輸出錯誤信息的,cout是正常輸入,一般情況下cerr和cout都指向一個地方,所以看不出區別。就像在C里同樣有stdout和stderr。另外好像cerr是無緩沖的,不會丟失信息。
c++里關於cerr,clog,cout三者的區別:
cerr(無緩沖標准錯誤)-----沒有緩沖,發送給它的內容立即被輸出
clog(緩沖標准錯誤)--------有緩沖,緩沖區滿時輸出
cout-------------------------標准輸出
三個都是ostream類定義的輸出流對象,
cout是在終端顯示器輸出,cout流在內存中對應開辟了一個緩沖區,用來存放流中的數據,當向cout流插入一個endl,不論緩沖區是否漫
了,都立即輸出流中所有數據,然后插入一個換行符.
cerr流對象是標准錯誤流,指定為和顯示器關聯,和cout作用差不多,有點不同就是cout
通常是傳到顯示器輸出,但可以被重定向輸出到文件,而cerr流中的信息只能在顯示器輸出.
clog流也是標准錯誤流,作用和cerr一樣,區別在於cerr不經過緩沖區,直接向顯示器輸出信息,而clog中的信息存放在緩沖區,緩沖區滿
或者遇到endl時才輸出.
==============================================================================
以上都是我copy來的...
同意樓上.
一般來說,是分不出來的(默認都在屏幕上),但是如果對標准輸入輸出設備進行重定向的時候,就分開了...
簡單地說,可以理解成:
cerr輸出時不會緩沖也不允許重定向。
cout輸出時會有緩沖而且可以重定向。
你可以用下面的代碼試試:
#include <iostream>
using namespace std;
int main()
{
cout << "good...";
cerr << "luck...";
}
編譯連接后運行的時候很可能會先看到luck...,如果運行的時候帶重定向符號(比如>a.txt),會發現luck...還是會出現在屏幕上。
不是一個流。
你就別假設他們有聯系不就行了么。
雖然默認情況下它們都導向控制台窗口。
其實,即使它們功能上有區別,也是有辦法抹殺的。
所以,最關鍵的區別不是功能上的,而是它們不是一個流。
cerr不進行緩沖而直接輸出內容,cout首先將內容寫入緩沖區,緩沖區刷新時才將內容輸出