【C++】iostream 中 cout cerr clog 之间的区别

一、简述

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 打印错误信
(这里有个空行)

三、参考

输入/输出库
C++中cout、cerr、clog的区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容