一、简述
cout
cerr
clog
都是标准 IO 库提供的输出工具
cout
支持重定向操作cerr
clog
主要用于错误的输出
函数 | 说明 | 其他 |
---|---|---|
cout | 写入标准 C 输出流 stdout | |
cerr | 写入标准 C 错误流 stderr,无缓冲 | 为了保证程序出现错误时,仍能显示错误信息 |
clog | 写入标准 C 错误流 stderr,有缓冲 |
cout
是在终端显示器输出,cout
流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout
流插入一个endl
,不论缓冲区是否满了,都立即输出流中所有数据,然后==插入一个换行符==。
cerr
流对象是标准错误流,指定为和显示器关联,和cout
作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr
流中的信息只能在显示器输出。
clog
流也是标准错误流,作用和cerr
一样,区别在于cerr
不经过缓冲区,直接向显示器输出信息,而clog
中的信息存放在缓冲区,缓冲区满或者遇到endl
时才输出.
缓冲:就是为了在屏幕刷新时可以批量对输出的数据进行显示,而不是每个字符输出都会刷新屏幕
缓存刷新:1. 可以显示的使用endl
进行刷新;2. 在程序非正常终止时也会刷新cout
二、测试代码
#include <iostream>
int main()
{
std::cout << "cout 打印错误信息" << std::endl;
std::cerr << "cerr 打印错误信息" << std::endl;
std::clog << "clog 打印错误信息" << std::endl;
return 0;
}
在命令行中执行:
$ cpp > cpp.log
会在终端打印出来:
cerr 打印错误信息
clog 打印错误信息
而在 cpp.log
文件中出现(重定向输出):
cout 打印错误信
(这里有个空行)