zoukankan      html  css  js  c++  java
  • cerr与cout区别

    语言:C++

    一、简介

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

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

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

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

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

    二、区别

     

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

     

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

    2、cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,是标准错误,默认情况下被关联到标准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示。一般情况下不被重定向

     

    对于为什么有cerr和clog

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

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

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

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

     

    附录——C++Primer(第四版)中的说明:

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

     

  • 相关阅读:
    SQL将表中某一类型的一列拼接成一行
    javascript中把一个数组的内容全部赋值给另外一个数组
    Socket接口原理及用C#语言实现
    Linq表连接大全(INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)
    C#中对DataTable进行全连接后group by,orderby
    循环删除DataTable.Row中的多行问题
    跨库连接报错Server 'myLinkedServer' is not configured for RPC
    执行远程存储过程并插入到临时表中
    无法定位程序输入点_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findEPKcj于动态链接库上
    Qt 日期时间
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/CCC_cout_cerr.html
Copyright © 2011-2022 走看看