8.2 C++标准输出流对象
参考:http://www.weixueyuan.net/view/6408.html
总结:
iostream头文件,包含了该头文件后,我们就可以直接使用这些对象,包含标准的输出流对象cout、cerr和clog以及标准输入流对象cin等。
所谓标准输出其实就是向标准输出设备进行输出,通常来讲我们可以将标准输出设备理解为显示器。
系统声明的三个标准输出流对象cout、cerr和clog中,cerr和clog对象都是标准错误流,不同的是cerr是直接将错误信息输出到显示器,而clog则不同,clog是将错误信息先写入到缓冲区,待清扫缓冲区时,再将错误内容输出到显示器中。
与cerr和clog对象不同,cout对象则非错误流,而只是普通的输出流,该对象在进行输出时,也会经过先缓冲区,然后再输出到显示器。
endl会带来一次清扫缓冲区动作。
---------------------------
所谓标准输出其实就是向标准输出设备进行输出,通常来讲我们可以将标准输出设备理解为显示器。系统声明的三个标准输出流对象cout、cerr和clog中,cerr和clog对象都是标准错误流,不同的是cerr是直接将错误信息输出到显示器,而clog则不同,clog是将错误信息先写入到缓冲区,待清扫缓冲区时,再将错误内容输出到显示器中。与cerr和clog对象不同,cout对象则非错误流,而只是普通的输出流,该对象在进行输出时,也会经过先缓冲区,然后再输出到显示器。
例1:
#include<iostream>
using namespace std; enum index { underflow, overflow }; int array_index ( int *A, int n, int index ); int main()
{
int *A = new int [ ];
for ( int i = ; i < ; i ++ )
A[i] = i;
try
{
cout << array_index( A,, ) << 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,,- ) << 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,, ) << endl;
}
catch( index e )
{
if( e == underflow )
{
clog << "index underflow!" << endl;
}
if( e == overflow )
{
clog << "index overflow!" << endl;
}
}
return ;
} int array_index( int *A, int n, int index )
{
if ( index < ) throw underflow;
if ( index > n- ) throw overflow;
return A[index];
}
在该程序中我们同时使用到了cout、cerr和clog对象,cout对象我们早已经不陌生,在前面几乎所有的例程中输出都是用的它,cerr和clog用于错误信息输出,它的使用方式其实和cout时一样的,在本例中我们将其用于输出异常信息。当访问数组出现下标越界时,程序就抛出异常,然后会被catch程序块捕获并在程序块中输出异常信息。在本例中我们如果将程序中的所有cerr全都替换为clog或者将所有clog全都替换为cerr,程序的输出结果是不会变化的,从这点看这两者似乎是没什么差别,其实差别在是否经过缓冲区,不过本例是无法体现出差别的,因为在输出异常信息的同时,endl会带来一次清扫缓冲区动作,因此经不经过缓冲区是无法得以体现的。cerr和clog之间的细微差别,我们只要做到心中有数就可以了。
8.2 C++标准输出流对象的更多相关文章
- JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...
- java IO流 之 其他流
一.内存操作流(ByteArrayInputStream.ByteArrayOutputStream) (一). public class ByteArrayInputStream extends ...
- 01从c到c++
c++的发展历史 + 80年代贝尔实验室 本贾尼 + 83年 正式命名c++ + 87年 gnu制定了c++标准 + 92年 微软和IBM分别制定了c++标准 + 98年 ansi ISO 制定了标 ...
- C++学习48 对ASCII文件的读写操作
如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件).程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符. 对ASCI ...
- javaSE第二十二天
第二十二天 312 1:登录注册IO版本案例(掌握) 312 2:数据操作流(操作基本类型数据的流)(理解) 313 (1)定义: 313 (2)流对象名称 313 (3 ...
- C++:流类库与输入输出
7.2.1 C++的输入输出流 ios:流基类(抽象类) istream:通用输入流类和其他输入流的基类 ostream:通用输出流类和其他输出类的基类 iostream:通用输入输出流类和其他输入输 ...
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...
- 【转载】C++的文件和流
http://www.iteedu.com/plang/ccpp/cppdxjch2b/111.php C++语言把每一个文件都看成一个有序的字节流(见图14.2),每一个文件或者以文件结束符(end ...
- (JAVA)从零开始之--打印流PrintStream记录日志文件
这里的记录日志是利用打印流来实现的. 文本信息中的内容为String类型.而像文件中写入数据,我们经常用到的还有文件输出流对象FileOutputStream. File file = new Fil ...
随机推荐
- Arduino 开关控制小灯持续亮之具体思路
Arduino 开关控制小灯持续亮之具体思路 为什么写这篇文章: 我们用开关控制灯的亮灭的时候,希望只需要按一下按键就可以做到灯一直亮着.而在<Arduino魔法书>中——有弹性的按键这一 ...
- VLC框架分析
功能部份:VLC媒体播放器的核心是libvlc ,它提供了界面,应用处理功能,如播放列表管理,音频和视频解码和输出,线程系统.所有libvlc源文件设在的/src目录及其子目录:# config/ ...
- 虚拟机linux 如何挂在U盘,NTFS格式如何挂载
今天突发奇想,想挂载U盘到虚拟机的Centos 7 上,但是出了些问题,下边我就来说下linux挂在U盘的步骤 电脑插上U盘 win + R运行 services.msc 找到虚拟机的USB服务并运行 ...
- gitlab 集成Jenkins
项目:使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将git路径存在这里还需要权限认证,否则会出现error 我 ...
- 【实战问题】【1】@PostConstruct 服务启动后加载两次的问题
@PostConstruct:在服务启动时触发操作(我是用来更新微信的access_token) 解决方法: tomcat文件夹→conf→server.xml→将appBase="weba ...
- mysql排序的中文首字母排序和自定义排序
select * FROM organ_new where city_code = 'SZ0755' and organ_type = 'H' and state = '1' ORDER BY FIE ...
- php面向对象比较
在PHP中有 = 赋值符号.== 等于符号 和 === 全等于符号, 这些符号代表什么意思? (1).=是赋值符 (2).使用 == 符号比较两个对象 ,比较的仅仅是两个对象的内容是否一致. (3). ...
- maven生命周期绑定要点
生命周期不执行任何操作,都是抱插件大腿 maven-core-3.3.9-sources.jar下META-INF/plexus/components.xml的定义了三个生命周期的插件绑定 参考:ht ...
- Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
1.Fastjson 我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢? try{ Object object = JSON.parse(a); ...
- python中sys.argv[]的使用
sys.argv[]主要用于程序从外部获取参数.其参数个数可以是多个,组建成一个列表(list). 几个简单示例如下: fun_test.py: #!/usr/bin/env python # -*- ...