在C++中,cerr
和cout
都是标准库提供的输出流,但它们之间有一些重要的区别:
1. 输出目的地
cout
:表示“标准输出”(Standard Output),默认情况下,它的内容会被发送到程序运行时的标准输出设备(通常是终端或屏幕)。
用于输出正常的程序信息。
cerr
:表示“标准错误”(Standard Error),也默认输出到终端或屏幕。
一般用于输出错误信息。
2. 缓冲区(Buffering)
cout
:是完全缓冲的(Fully Buffered)。这意味着输出内容可能会在缓冲区中积累,直到缓冲区满或者程序显式调用刷新操作(如
\n
或std::endl
),才真正写入到输出设备中。换行符
\n
不会自动刷新缓冲区,而std::endl
会自动刷新缓冲区。
cerr
:是无缓冲的(Unbuffered)。每一条输出都会立即发送到输出设备,不会等待缓冲区满或者显式刷新,因此可以更及时地显示错误信息。
3. 主要用途
cout
:用于常规的输出,比如打印程序的结果、调试信息等。
cerr
:专门用于输出错误信息。由于它是无缓冲的,可以在程序发生严重错误时迅速将错误信息输出,以便用户能够立即观察到问题。
4. 输出流标识符
cout
:对应的流是
stdout
。
cerr
:对应的流是
stderr
。
示例代码
以下是一个简单的示例,展示了cost
和cerr
的用法:
#include <iostream>
using namespace std;
int main() {
// 使用cout输出正常信息
cout << "This is a normal message via cout." << endl;
// 使用cerr输出错误信息
cerr << "This is an error message via cerr." << endl;
return 0;
}
输出
This is a normal message via cout.
This is an error message via cerr.
总结
如果你要输出正常的程序信息,使用
cout
。如果你要输出错误信息,使用
cerr
,因为它是无缓冲的,可以立即显示错误内容。