先来看一下C++Primer(第四版)定义了4个IO对象,供大家参考:

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

其实大家平常常会用的主要有三个: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++入门系列---cout、cerr、clog 三者的区别相关推荐

  1. cout/cerr/clog的区别

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

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

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

  3. WPF快速入门系列(8)——MVVM快速入门

    一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...

  4. OpenCV入门系列 —— boxFilter盒子滤波

    OpenCV入门系列 -- boxFilter盒子滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识 ...

  5. PCL入门系列 —— PassThrough 直通滤波、点云裁剪

    PCL入门系列 -- PassThrough 直通滤波.点云裁剪 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同 ...

  6. PCL入门系列 —— StatisticalOutlierRemoval 点云统计滤波

    PCL入门系列 -- StatisticalOutlierRemoval 点云统计滤波 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领 ...

  7. OpenCV基础入门系列基本操作——贰

    系列博文第二篇,关于OpenCV4的一些基本操作和使用. 博文主要以实例展示不同的函数使用方法. OpenCV基础入门系列基本操作--壹 前言 下述为本博文需要用到的各类头文件以及全局变量等 读者可根 ...

  8. PCL入门系列 —— NormalEstimation、NormalEstimationOMP 基于邻域的点云法线估计

    PCL入门系列 -- NormalEstimation.NormalEstimationOMP 基于邻域的点云法线估计 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进 ...

  9. OpenCV入门系列 —— cv::dilate 图像膨胀

    OpenCV入门系列 -- cv::dilate 图像膨胀 前言 程序说明 输出结果 代码示例 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别 ...

最新文章

  1. 做网站应用应注意的那几点
  2. 参加第十届的队员给智能车竞赛的建议:抄能力+钞能力使得一届不如一届
  3. (4)pyspark---dataframe清理
  4. 腾讯云linux系统结合nginx部署项目
  5. 最全面的MySQL笔记
  6. TreeSet()详解
  7. Ubuntu 14.04 下 Virtual Judge 的搭建
  8. linux 大量文件 ls卡死,Linux下文件过多导致 ls 命令出现 arguments too long 的问题
  9. 沈阳python需求大吗_学习Python之后都能做什么,沈阳Python薪资多少钱
  10. matlab拟合函数的三种方法
  11. 开启samba服务的设置步骤
  12. RocketMQ 消息发送system busy、broker busy原因分析与解决方案
  13. Longhorn 云原生容器分布式存储 - 故障排除指南
  14. matlab图形黎曼几何,[转载]黎曼几何是篡改数学概念的几何
  15. 天津理工大学计算机项目管理实验四,天津理工大学软件工程实验报告4.docx
  16. 笔记本显卡天梯图2023 笔记本显卡性能天梯图2023年2月
  17. 【笔试——腾讯2021实习笔试题第二次2021.4.4】第3题 n人高空过钢索
  18. maya包裹表情变形_MAYA做表情时常用的混全变形器的相关介绍
  19. c语言鸣炮21响,肱二头肌高级训练法--“21响礼炮”
  20. 为什么汽车的中控屏不能用平板代替?

热门文章

  1. dx12 龙书第七章学习笔记 -- 利用Direct3D绘制几何体(续)
  2. html小车源码,C# 控制小车 移动 示例源码
  3. JAVA趣味课程:手机通讯录管理系统(连接数据库管理信息)
  4. 用万字给面试官讲清楚了hello world,面试官呆了!!
  5. 2020年必读的数学书籍——数学如何影响生活的方方面面?
  6. 判断一个素数是否可以写成两个立方数的差(预处理+二分)
  7. Python 基于SVM和KNN算法的红酒分类
  8. 面试当天需要注意什么?
  9. 沪深A股数据库-上市公司购买理财产品数据、员工持股计划等多维度指标数据
  10. 笔记本电脑计算机目录下无法显示视频设备,笔记本电脑摄像头怎么打开?