cout:一个ostream对象,向标准输出写入数据;
cerr:一个ostream对象,通常用于输出程序错误消息,写入到标准错误;
clog:一个ostream对象,用于产生程序执行的一般信息;
cout流在内存中开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否满,都立即输出流中的所有的数据,并且插入一个换行符(当然程序正常结束或者缓冲区满时,也会导致缓冲刷新,即数据真正的写到输出设备或者文件)。关于缓冲区的刷新时间见 C++ Primer P281 第五版中文版。
而cerr不经过缓冲区,直接向显示器输出信息,正是由于这个原因,cerr是不能被重定向到文件的;比如下面的例子:
#include <iostream>
using namespace std;
int main()
{
cout << "cout" << endl;
cerr << "cerr" << endl;
return 0;
}
编译运行程序之后假设产生text.exe,在windows的cmd命令行下使用下面的命令:
text.exe > text.log
执行这个.exe文件,你会看到 命令行的输出为:
cerr
在命令行中的输出只有cerr;并且使用记事本查看text.log这个文件的话&#