当前位置:网站首页>cout/cerr/clog的区别

cout/cerr/clog的区别

2022-07-04 22:37:00 编程小段

cout/cerr/clog都是C++提供的标准输出流,那这三个到底有什么区别?
cout: 标准输出流,一般缓冲区满或者程序结束才刷新缓冲区
cerr: 标准输出错误,输出一条语句就会刷新一次缓冲区
clog: 标准输出日志,相对来说刷新缓冲区的频率不高

先看一个简单的例子

#include<iostream>

int main()
{
    
	std::cout << "output to cout";
	std::cerr << "output to cerr";
	std::clog << "output to clog";
}

如果我们直接运行该程序,那么这三行都会输出到屏幕
在这里插入图片描述
但是,如果我们进行输出重定向,那么cout和cerr/clog会输出到不同的文件(0表示标准输入,1表示标准输出,2表示标准错误输出)
在这里插入图片描述

那么,既然有了cerr,为什么还要有clog?

我们都知道程序输入输出都会有缓冲区,缓冲区是在内存中,而文件则是在磁盘中,程序访问内存的速度远快于访问磁盘的速度。所以为了提升效率,程序都会先输出到缓冲区,等缓冲区满了或者在显示刷新缓冲区的时候才会写入到磁盘文件里。但是如果缓冲区还没有满,此时程序崩溃,那么缓冲区中的数据就会丢失,相对来说cerr错误信息就会很重要,为了保证错误信息写入到磁盘文件,程序会经常刷新缓冲区。clog日志信息相对来说就没有那么重要,因此也不会经常刷新缓冲区(注意:频繁的刷新缓冲区会降低运行速度,因为频繁的访问磁盘内容)

std::flush:刷新缓冲区
std::endl:刷新缓冲区并且换行
一般的程序会在程序运行结束才会去刷新缓冲区,但是有时我们不想刷新缓冲区但是想加一个换行,那么就要使用转义字符\n

#include<iostream>

int main()
{
    
	std::cout << "output to cout\n";
	std::cerr << "output to cerr\n";
	std::clog << "output to clog\n";
}

在这里插入图片描述

原网站

版权声明
本文为[编程小段]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45298607/article/details/125587390