对java熟悉的朋友们都很清楚,java中的异常处理机制是非常完善的。并且java强制使用异常处理,用户必须对有可能出现异常的情况进行处理。在c++中并没有强制用户使用异常处理,但是使用异常处理将会使您的程序更加的健壮。

在c++中,一个函数在执行的过程中可以识别异常(例外),并通告异常的发生。这种通告机制称为抛出异常,使用关键字throw。异常抛出后,可以由函数的调用者进行捕捉并进行处理,使用关键字catch。我们一般将可能会抛出异常的程序块放到try语句块中去执行,以便用catch来进行捕捉。个人感觉c++中异常处理的这一套和java非常相似,都是try{......}catch(..){......}这种结构。下面看一个例子:

try
{
f();//f() may throw some exception
}
catch(int a)
{
......
}
catch(char b)
{
......
}

try程序块可能会抛出异常,由catch程序块来进行捕捉。catch块之间的顺序可以任意,但是必须位于try之后,另外catch块会将抛出的异常的类型与自己要捕捉的异常类型进行对比,如果匹配则进行捕捉。

举一个具体的例子:

     while(true)
{
cout << "please enter the index and length to erase:"<<endl;
cin >>index>>length;
try
{
str.erase(index,length);
}
catch(out_of_range)
{
continue;
}
break;
}

如果输入的index大于字符串的长度将会引发一个异常out_of_range,即数组下标越界,这时异常就会被catch语句块捕捉到并进行处理。

下面用一个例子演示如何抛出异常:

const int MaxSize = 1000;
float arr[MaxSize];
enum out_of_bounds{underflow,overflow};
float& access(int i)
{
if(i<0)
{
throw underflow;
}
if(i>=MaxSize)
{
throw overflow;
}
}
try
{
......
val = access(k)
}
catch(out_of_bounds t)
{
if(t==overflow)
{
cerr<<"overflow"<<endl;
exit(EXIT_FAILURE);
}
if(t==underflow)
{
cerr<<"underflow"<<endl;
exit(EXIT_FAILURE);
}
}

由try语句块抛出异常,catch语句块进行捕捉后进行分析是什么异常,然后进行处理。

C++基础知识(八)例外、异常处理相关推荐

  1. Java基础知识(八) Java平台与内存管理

    Java基础知识 1. 为什么说Java是平台独立性语言 2. Java 平台与此他语言平台有哪些区别 3. JVM 加载 class 文件的原理机制是什么 4. 什么是GC 5. Java 是否存在 ...

  2. Python基础知识(八):模块化、标准库、第三方库

    一.模块化编程理念_什么是模块_哲学思想 1.模块和包概念的进化史 Python 程序由模块组成.一个模块对应python 源文件,一般后缀名是:.py. 模块由语句组成.运行Python 程序时,按 ...

  3. Python基础知识(六):异常处理

    01_异常的本质_调试核心理念 在实际工作中,我们遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求;你的程序要打开某个文件,这个文件可能不存在或者文件格式不对;你要读取数 ...

  4. 数据库基础知识(八)

    Java代码连接Mysql数据库 第一步:下载MySQL连接驱动https://dev.mysql.com/downloads/connector/j/ 第二步: 加载驱动 第三步:代码加载数据库驱动 ...

  5. 如何获取exception的target异常_C# 基础知识系列- 15 异常处理篇

    0. 前言 为什么我们需要异常处理?什么是异常? 在汉语中,异常指非正常的:不同于平常的.翻译到程序中,就是指会导致程序无法按照既定逻辑运行的意外,或者说是错误.可能会有小伙伴好奇了,我们的程序不是正 ...

  6. java 基础知识八 正则表达式

    正则表达式 是一种可以用于模式匹配和替换的规范, 一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式, 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作 ...

  7. PHP面试 PHP基础知识 八(会话控制)

    ---恢复内容开始--- PHP会话控制技术 首先了解一下为什么要使用会话控制技术? 本身web 与服务器的交互是通过HTTP协议来实现的,而HTTP协议又是无状态协议.就是说明HTTP协议没有一个內 ...

  8. android 强制下线功能,Android学习之基础知识八—Android广播机制实践(实现强制下线功能)...

    强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要 ...

  9. Java基础知识(九) 容器

    Java基础知识 1. Java Collections 框架是什么 2. 什么是迭代器 3. ArrayList.Vector 和 LinkedList 有什么区别 4. HashMap.Hasht ...

  10. MT4外汇交易入门需要了解哪些基础知识?

    现在,外汇投资是一种热门的理财方式,MT4交易平台就在这样的大形势下应运而生,许多用户都会在MT4平台上进行外汇交易,由于MT4平台是一款软件,因此使用前要先进行下载,下载MT4交易平台后,就需要学习 ...

最新文章

  1. 关于通过DDMS向Android系统的模拟器的sdcard中导入mp3文件的问题
  2. java网络编程与分布式计算_Java网络编程与分布式计算
  3. NOI入门级:数据结构之线性表
  4. bzoj 1055: [HAOI2008]玩具取名(区间DP)
  5. bootstrap jasny fileinput插件冲突问题解决
  6. Atitit 理财之道 信用卡账单管理之道 attilax总结 1. 信用卡账单管理 信用卡账单信息的目的,解决一下问题 2 1.1. 账单记录明细可追溯,原则上保留五十年 可按照时间  银行  卡
  7. 微分方程的数值解法与程序实现 pdf_数值计算方法·第三部分
  8. 前端常见面试题 —— BFC是什么?
  9. 普林斯顿算法课Part2第四周作业_Boggle
  10. Kali + Win10双系统下的grub问题
  11. winRAR压缩、解压不常见的文件格式
  12. 宽带和网线有什么区别?
  13. 安全面试之WEB安全(二)
  14. Confluence迁移中遇到的问题(Data too long for column #39;STRINGVAL#39;)及解决方法
  15. 卫片图斑_制作和下发卫片执法图斑
  16. dolphin scheduler(一)
  17. android 4.0 更换鼠标图案
  18. 约定求和、Kronecker符号和Levi-Civita符号
  19. 排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right side of xxx
  20. 视频教程-2020软考--网络规划设计师【论文】视频精讲-软考

热门文章

  1. [转载] Python从字符串中删除字符
  2. JS call()与apply()的用法
  3. dokcer 容器启动报错
  4. java与数据库连接的几个步骤
  5. 比较:Java和python
  6. 深度学习---之bias
  7. ubuntu学习日记--Lesson5:系统目录详解
  8. pip 安装速度慢解决办法
  9. 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析
  10. java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件