一、简述
cout cerr clog 都是标准 IO 库提供的输出工具
cout支持重定向操作cerrclog主要用于错误的输出
| 函数 | 说明 | 其他 |
|---|---|---|
| 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 打印错误信
(这里有个空行)
