其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。

这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论):

cout:写到标准输出的ostream对象;

cerr:输出到标准错误的ostream对象,常用于程序错误信息;

clog:也是输出标准错误流(这点儿和cerr是一样的),貌似平时很少用到这个啊;

具体在输出的时候,三者是有区别的:

1、cout经过缓冲后输出,默认情况下是显示器。这是一个被缓冲的输出,是标准输出,并且可以重新定向(关于重新定向的意思可以参考下面的例子);

2、cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,是标准错误,默认情况下被关联到标准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示。一般情况下不被重定向(重定向这点儿好像有争论,有些人说和系统有关,本人还不太明白)

对于为什么有cerr和clog

  比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归)。

  你说,你到什么地方借内存,存放你的错误信息?

  所以有了cerr。其目的,就是在你最需要它的紧急情况下,还能得到输出功能的支持。

  缓冲区的目的,就是减少刷屏的次数——比如,你的程序输出圣经中的一篇文章。不带缓冲的话,就会每写一个字母,就输出一个字母,然后刷屏。有了缓冲,你将看到若干句子“同时”就出现在了屏幕上(由内存翻新到显存,然后刷新屏幕)。

附:

#include <iostream>

using namespace std;

int main()

{

cout << "cout" << endl;

cerr << "cerr" << endl;

return 0;

}

运行此程序之后,我们在命令行执行如下命令:

假设编译运行后的可执行文件名为cerr.exe,其目录为E:\cpro\cerr\Debug\cerr.exe

在命令行下,切换到这个目录下,执行命令:cerr>test.log

命令行输出如下:

E:\cpro\cerr\Debug>cerr>>test2.log

Cerr(这是在命令行下输出的)

查看test2.log文件,发现里面只有

Cout

一行。

可能这个就是所谓的重定向输出。

从这里可以看出:
cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符.

cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout 
通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出. 
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.

今天看C++Primer(第四版)的时候又看到了这几个,摘抄一段话,供大家参考:

"标准库定义了4个IO对象,处理输入时使用命名为cin的istream类型对象,这个对象也成为标准输入。处理输出时使用命名为cout的ostream类型对象,这个对象也称为标准输出。标准库还定义了另外两个ostream对象,分别命名为cerr和clog。cerr对象又叫标准错误,通常用来输出警告和错误信息给程序的使用者,而clog对象用于产生程序执行的一般信息。一般情况下,系统将这些对象与执行窗口联系起来,这样,当我们从cin读入时,数据从执行程序的窗口读入,当写到cout、cerr、clog时,输出写至同一窗口。运行程序时,大部分操作系统都提供了重定向输入或者输出流的方法。利用重定向可以将这些流与所选择的文件联系起来"

转载于:https://www.cnblogs.com/yzl050819/p/5951612.html

cout、cerr、clog相关推荐

  1. cin、cout、cerr、clog用法区别及其在VS环境下的重定向

    今天学习C++,发现C++中的输出流除了常用的cout,还有cerr和clog两种输出流对象,由于之前没有遇到过,所以特地查了一下用法,记录一下. 1.      cin.cout.cerr.clog ...

  2. c++中cout、cerr、clog的区别

    之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论) 其实大家平常常会用的主要有三个:c ...

  3. 【C++】cout、cerr、clog之间的区别

    cout.cerr.clog三者都是标准IO库中提供的输出工具. 但是cout是支持重定向操作的.比如freopen()对于cout有效.clog和cerr主要用于错误输出.因此,如果将程序输出重定向 ...

  4. C++入门系列---cout、cerr、clog 三者的区别

    先来看一下C++Primer(第四版)定义了4个IO对象,供大家参考: "标准库定义了4个IO对象,处理输入时使用命名为cin的istream类型对象,这个对象也成为标准输入.处理输出时使用 ...

  5. C++ std::cout std::cerr std::clog

    参考:https://blog.csdn.net/bsmmaoshenbo/article/details/50778068 std::cout输出时,先被缓存到缓冲区,遇到换行符时输出到屏幕上 st ...

  6. C++ 语言 std::cin - std::cout - std::cerr - std::clog

    C++ 语言 std::cin - std::cout - std::cerr - std::clog std::cin - 标准输入流 std::cout - 标准输出流 std::cerr - 标 ...

  7. C++常用输出 cout、cerr、clog

    三者在C++中都是标准IO库中提供的输出工具: cout:写到标准输出的ostream对象: cerr:输出到标准错误的ostream对象,常用于程序错误信息: clog:也是输出标准错误流(这点儿和 ...

  8. cout,cerr和clog的区别

    官方解释: cout--Standard output stream Object of class ostream that represents the standard output strea ...

  9. Cin、cout、 cerr和 clog用法和区别

    Cin :一个istream对象,用来从标准输入读取数据. Cout:一个ostream对象,用于将数据写入标准输出.输出的数据是一种被动缓冲,经过缓冲区而直接输出(该种输出方式可以看到整段和这句同时 ...

最新文章

  1. MSE病毒库离线更新包
  2. 【ios】NSMutableArray initWithContentOfFile 得到nil后无法进行addObject的问题
  3. ABAP中查找代码的标准程序
  4. 配置git 账户密码时bash:$:command not found
  5. 坐标转换 计算机图形学_计算机图形学的转换类型
  6. java中钩子方法 addShutdownHook 学习使用
  7. vs c语言程序调试方法,VS2015中的常用调试技巧分享
  8. java 多线程并容器实现_跟着实例学习java多线程9-并发容器
  9. AI技术已经如此逆天了,该有时间学学AI了
  10. HDU 3333-Turing Tree(BIT好题)
  11. Notes Twenty one days-渗透攻击-红队-权限提升
  12. SSM医院挂号就诊预约系统 毕业设计-附源码250853
  13. 计算机的音量找不到了,win7旗舰版64位系统右下角音量小喇叭图标不见了怎么找回...
  14. win10打开计算机加载很慢,解析为何win10系统中我的电脑打开速度很慢
  15. 如何抢功,甩锅,立于不败之地???
  16. ParticleDesigner 粒子编辑器使用
  17. 03_我不是潘金莲,聊相似性推荐
  18. 项目使用jdk17人傻了
  19. 这一次,彻底解决Java的值传递和引用传递
  20. Purism FAQ

热门文章

  1. 5年没有工资收入,他如何支撑世界上最大的免费编程社区?
  2. 大学生如何让自己的简历闪闪放光?
  3. Redis : redis事务
  4. 数据库并发一致性的问题
  5. Android 面试题集整理
  6. 【Linux - mysql】怎么修改数据库编码
  7. mysql5.7rpm安装 force_mysql5.7.27离线安装(基于centos7 ,通过rpm安装)
  8. android摄像头代码,Android摄像头
  9. 数据中心在疫情期间发挥的作用
  10. 民生银行数据库智能运维的探索与实践