C++ cout cerr 和 clog 的区别

本文通过实例对比了C++中的cin、cout、cerr与clog的功能特性。详细解析了cout与cerr输出方向的区别,以及cerr与clog在缓冲机制上的不同。介绍了它们的设计初衷及应用场景。
我们都知道C++预定义了cin(标准输入流)和cout(标准输出流)。但今天突然又蹦出来两个cerr(标准错误流(非缓冲))和clog(标准错误流(缓冲))
,本着学习提高的态度在网上搜索了相关内容,下面是从百度知道获取的内容
ps:不知道是不是会侵权呀......

首先通过一个例子就可以分析cout与cerr的区别,将下面代码编译链接后生成test.exe    

复制代码

1 #include   <iostream.h>
2     
3 int   main()
4 {
5      cout   <<   "hello   world---cout"   <<   endl   ;
6      cerr   <<   "hello   world---cerr"   <<   endl   ;
7      return   0;
8 }

复制代码

在命令行模式下键入下面的命令: test >>cout.txt

  运行结果是:   
  在生成的cout.txt文件中输出了"hello   world---cout"   
  同时在显示器上输出了"hello   world---cerr"   
  也就是说cout的输出可以重定向到一个文件中,而cerr必须输出在显示器上。 

再分析下cerr与clog的区别,两者都是标准错误流, 区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.  

至于为什么有cerr和clog(我感觉这才是重点),比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归),你说,你到什么地方借内存,存放你的错误信息?
所以有了cerr。其目的,就是在你最需要它的紧急情况下,还能得到输出功能的支持。
缓冲区的目的,就是减少刷屏的次数——比如,你的程序输出圣经中的一篇文章。不带缓冲的话,就会每写一个字母,就输出一个字母,然后刷屏。有了缓冲,你将看到
若干句子“同时”就出现在了屏幕上(由内存翻新到显存,然后刷新屏幕)。

pps:以上内容来自网络,未得到验证,仅供学习参考。
////////////////////////////////////////////README//////////////////////////////////////////////////// // DebugLog--write some log for debug // //初衷: 版本开发的时候,有些功能点是可以项目无关的,比如是解析某个文件;开发完成之后,测试的话, // // 需要整改项目程序运行、测试,功能点的触发条件比较麻烦。所以,有的时候,对于这样的功能点, // // 我会选择进行本地开发,然后再合到项目中去. // // 但是,每次功能点开发的时候,一般用的是printf直接打屏,但是项目中用的是写文件,所以移植 // // 的时候还需要进行不少改动. // // 于是,我就想自己写个log,可以与项目的日志函数进行适配。那么,上面的问题可以得到比较好的 // // 解决(或者说是规避)。 // //附注:我不知道这样做有没有意义,也就是根据自己的经验,试着做了下。经验不足,水平有限,肯定会 // // 导致设计不足,不对,甚至是整个设计没有意义。如果是这样,希望能不吝交流、赐教. // // EMail: hu__haifeng@163.com // ////////////////////////////////////////////////////////////////////////////////////////////////////// //Version :0.5 // //Description:该版本打造了基本的架构,并且实现了不带参数的打印日志(仅仅是字符串),可以进行监督的测试.// // 由于我项目经验有限,仅仅见过两种不同的项目日志分隔,所以也只能以此为参考,不一定可以 // // 适配其他项目日志函数. // //Adapter :可以用宏定义来进行适配。比如: // // #ifdef __CLOG_H__ // // #define DEBUG(VAR) mylog.Print(__FILE__, __LINE__, VAR, LOG_DEBUG) // // #else // // #define DEBUG(VAR) function //项目用的标准的日志函数. // // #endif // // // //Plan :1.0版本写成可以带参数的日志。2.0版本实现客户端、服务器版本(可以支持不同的进程写日志)。// //////////////////////////////////////////////////////////////////////////////////////////////////////
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值