程序设计过程中,不可避免地要进行输入与输出操作。前面章节列举的示例程序中,我们通常都会引入头文件,因为该头文件系统声明了输入输出类的对象,包含了该头文件后,我们就可以直接使用这些对象。这些对象中包含标准的输出流对象 cout、cerr 和 clog 以及标准输入流对象 cin 等。

本节,我们就来了解一下标准输出流的三个对象:cout、cerr 和 clog。所谓标准输出,其实就是向标准输出设备进行输出。通常来讲,我们可以将标准输出设备理解为显示器。

系统声明的三个标准输出流对象 cout、cerr 和 clog 中,cerr 和 clog 对象都是标准错误流,不同的是,cerr 是直接将错误信息输出到显示器,而 clog 是将错误信息先写入到缓冲区,待清扫缓冲区时,再将错误内容输出到显示器中。与 cerr 和 clog 对象不同,cout 对象则非错误流,而只是普通的输出流,该对象在进行输出时,也会经过先缓冲区,然后再输出到显示器。

#include<iostream>
using namespace std;
enum index { underflow, overflow };
int array_index ( int *A, int n, int index );
int main()
{int *A = new int [ 10 ];for ( int i = 0; i < 10; i ++ )A[i] = i;try{cout << array_index( A,10,5 ) << endl;}catch( index e ){if( e == underflow ){cerr << "index underflow!" << endl;}if( e == overflow ){cerr << "index overflow!" << endl;}}//index underflow test!try{cout << array_index( A,10,-1 ) << endl;}catch( index e ){if( e == underflow ){cerr << "index underflow!" << endl;}if( e == overflow ){cerr << "index overflow!" << endl;}}// index overflow test!try{cout << array_index( A,10,15 ) << endl;}catch( index e ){if( e == underflow ){clog << "index underflow!" << endl;}if( e == overflow ){clog << "index overflow!" << endl;}}return 0;
}
int array_index( int *A, int n, int index )
{if ( index < 0 ) throw underflow;if ( index > n-1 ) throw overflow;return A[index];
}

在该程序中,我们同时使用了 cout、cerr 和 clog 对象。cout 对象我们早已经不陌生,cerr 和 clog 用于错误信息输出,它们的使用方式和 cout 是一样的。在本例中,我们将其用于输出异常信息。当访问数组出现下标越界时,程序就抛出异常,然后会被 catch 程序块捕获并在程序块中输出异常信息。

在本例中,我们将程序中的所有 cerr 全都替换为 clog,或者将所有 clog 全都替换为 cerr,程序的输出结果是不会变化的,从这点看这两者似乎是没什么差别,其实差别在是否经过缓冲区,不过本例是无法体现出差别的,因为在输出异常信息的同时,endl 会带来一次清扫缓冲区动作,因此经不经过缓冲区是无法得以体现的。cerr 和 clog 之间的细微差别,我们只要做到心中有数就可以了。

C++标准输出流对象相关推荐

  1. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  2. (JAVA)从零开始之--打印流PrintStream记录日志文件

    这里的记录日志是利用打印流来实现的. 文本信息中的内容为String类型.而像文件中写入数据,我们经常用到的还有文件输出流对象FileOutputStream. 1 File file = new F ...

  3. JavaSE学习笔记(二十九)—— 其它流

    一.操作基本数据类型的流 数据输入流:DataInputStream DataInputStream(InputStream in) 数据输出流:DataOutputStream DataOutput ...

  4. Java基础:常用IO流

    1. 数据流 1.1 概述 数据流是操作基本数据类型的流,分为数据输入流,数据输出流. 1.2 数据输入流 1.DataInputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类 ...

  5. java填空题答案_JAVA求填空题答案

    三.填空题1.JVM是指.2.类定义了对象的一个种类,一个对象则是一个类中的.3.有下列程序段:for(inti=1,j=20,k=0;i<=3&&j>18;i++,j-- ...

  6. C++ 中的 IO流

    目录 回顾:C语言中的输入输出 C++中的IO流 一.流是什么? 二.C语言中的IO流 三.C++中的IO流 四.C++中的文件流 回顾:C语言中的输入输出 理解C++中的IO流之前,先来回顾一下C语 ...

  7. c++标准I/O输出流

    c++标准I/O输出流 c++标准I/O输出流 标准输出流常见api编程案例 使用cout.setf()控制符 C++格式化输出,C++输出格式控制 用流对象的成员函数控制输出格式 用流控制成员函数输 ...

  8. java,倒置后的顺序为3,2,1_java 程序设计题库

    答题要求:单选题,每题只有一个正确答案,选择正确给分,不正确不给分. 1. 下面( A )数据类型可用于main()方法中传递的参数 A.String B.Integer C.Boolean D.Va ...

  9. C++等级考试知识点总结

    第一章 C++语言概述 C++是一种面向对象的程序设计语言 抽象数据类型 封装和信息隐藏 以继承和派生方式实现程序的重用 以运算符重载和虚函数来实现多态性 以模板来实现类型的参数化 C++是C语言的超 ...

最新文章

  1. Python练习1-文档格式化成html
  2. 【ABAP】SUBMIT程序相互调用
  3. matlab实现音频信号的左右声道信号分离_立体声分离度与立体声相关系数
  4. JAVA面向对象明星类
  5. 静态代理、动态代理、AOP
  6. flume + kafka
  7. SpringCloud发现服务代码(EurekaClient,DiscoveryClient)
  8. 【LeetCode】剑指 Offer 32 - II. 从上到下打印二叉树 II
  9. 【MySQL】MySQL 查询优化器的提示(hint)
  10. 谁将掌控中国的金融?(上)
  11. Win32 编程
  12. vue的第一份正式源码
  13. eclipse打包成jar_SpringBoot系列(三)- 用 jar的方式运行springboot项目
  14. uniapp button字体没有垂直居中
  15. NOSQL,MongoDB是什么?
  16. 云计算给IT产业结构带来的影响
  17. 未知USB设备(设备描述符请求失败)解决方法
  18. 安装kata container with cri-o
  19. win7加速优化技巧
  20. 【测试】如何测试微信发红包功能

热门文章

  1. 射频篇(三) 模拟、射频器件学习(3) ——锁相环(PLL)
  2. Innodb存储引擎的缓存命中率计算
  3. thinkphp5中资源文件路径的使用
  4. 中国的程序员们是否要声援微软小冰?
  5. Mysql SQL Mode详解
  6. iOS 7 Searchbar右侧空白
  7. squid 的配置详解 (转)--SeriesI 收藏
  8. ArcGIS Server .Net Web ADF体系结构
  9. 定位ARM Hard Fault 的方法
  10. PAT甲级1109 Group Photo:[C++题解]双指针