c++程序中,采用一种专门的结构化处理逻辑的异常处理机制。

1.try语句

try语句块的作用是启动异常处理机制,检测try语句块中程序语句执行时可能出现的异常。

try语句块总是与catch一同出现,在一个try语句块后,至少有一个catch语句块。

2.throw语句

throw语句用来强行抛出异常,具体格式如下:

throw[异常类型表达式]   异常类型表达式可以是类对象,常量或变量表达式。

3.catch语句块

catch语句块首先捕捉try语句块产生的或有throw抛出的异常,然后进行处理。

catch(形参类型[形参名])                        //形参类型可以是c++的基本类型(如int,long,char等)

{

          //异常处理语句...

}

catch语句块中使用该形参名。例如:

try

{

throw "除数不能为0!";

}

catch(const char* s)    //制定形参类型名

{

cout<<s<<endl;         //使用异常形参名

}

当catch语句块中的整个形参为“...”时,则表示catch语句块能够捕捉任何类型的异常。catch的语句块前面必须是try语句或者另外一个catch语句块。

try、throw、catch三者之间的关系和注意点

throw和catch的关系类似函数调用关系,catch指定形参,throw给出实参。编译器按照catch出现的顺序及catch指定的参数类型确定throw抛出的异常应该有哪个catch来处理。

throw不一定出现在try语句块中,实际上,他可以出现在需要的任何地方,即使在catch的语句块中,仍然可以继续使用throw,只要最终有catch可以捕获它即可。

案例:

class Overflow

{

public:

  Overflow(char,double,double);

};

void f(double x)

{

throw Overflow('+',x,3.45e107);  //在函数体中使用throw,用来抛出一个对象

}

try

{

  f(1.2);

}catch(Overflow& oo)

{

  //处理Overflow类型异常

}

当throw出现在catch语句块中时,通过throw即可重新抛出一个新类型的异常,也可以重新抛出当前这个异常,在这种情况下,throw不应带任何实参。

try{

}catch(int)

{

throw "hello exception";  //抛出一个新的异常,异常类型为const char*

}catch(float)

{

throw;  }    //重新抛出当前的float类型异常

程序中try、throw、catch三者之间的关系的更多相关文章

  1. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  2. js中数据、内存、变量的概念及三者之间的关系

    目录 数据.内存.变量的概念及三者之间的关系 什么是数据 数据的特点 什么是内存 栈内存 堆内存 JS引擎如何管理内存 什么是变量 变量是普通类型时 变量是引用类型时 数据.内存.变量的三者之间的关系 ...

  3. silverlight Canvas、StackPanel、Grid三者之间的关系

    学习 silverlight   首先Canvas.StackPanel.Grid 博客园里看到jailu的这篇文章整理得很好 贴下来: Silverlight提供了非常灵活的布局管理系统,让程序员和 ...

  4. 电脑结构和CPU、内存、硬盘三者之间的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  5. 网络互联技术(2)——前篇—【转载】电脑结构和CPU、内存、硬盘三者之间的关系

    原文链接:传送门 详细内容: 电脑结构和CPU.内存.硬盘三者之间的关系 前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑 ...

  6. 转:spring data jpa、 hibernate、 jpa 三者之间的关系

    原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...

  7. Window系统、主函数和窗体函数这三者之间的关系

    理解Window系统.主窗体.窗体函数这三者之间的关系,对于编写Windows程序十分重要. 主函数和窗体函数都是由Windows系统来调用的函数.仅仅只是主函数是程序启动之后.系统首先调用的函数: ...

  8. Storm概念学习系列之Worker、Task、Executor三者之间的关系

    不多说,直接上干货! Worker.Task.Executor三者之间的关系 Storm集群中的一个物理节点启动一个或者多个Worker进程,集群的Topology都是通过这些Worker进程运行的. ...

  9. log4j 、logback 以及slf4j三者之间的关系

    在项目的开发中由于对于log4j.logback以及slf4j之间的关系和相关的知识不能清晰掌握,在业余时间进行记录. 1.三者之间的关系 1) 简答的讲就是slf4j是一系列的日志接口,而log4j ...

随机推荐

  1. JQuery 获取除某指定对象外的其他对象 :not() 与.not()

      .not() 遍历方法 从匹配元素集合中移除元素 :not() 选择器 选取除了指定元素以外的所有元素 .siblings() 遍历方法 返回被选元素的所有同级元素 需排除对象单数个(1个) 获取 ...

  2. sorted()排序详解

    sorted()排序详解     http://wiki.python.org/moin/HowTo/Sorting?highlight=%28howto%29#The_Old_Way_Using_t ...

  3. 010.KVM虚机冷迁移

    一 实验环境 原虚机名称:vm01-centos6.8 原虚机所在宿主机:kvm-host-2 迁移后虚机名称:vm01-cloud-centos6.8 迁移后虚机所在宿主机:kvm-host-2 二 ...

  4. Android 常见SD卡操作

    目录 Android 常见SD卡操作 Android 常见SD卡操作 参考 https://blog.csdn.net/mad1989/article/details/37568667. [0.] E ...

  5. BZOJ.4072.[SDOI2016]征途(DP 斜率优化)

    题目链接 题目要求使得下面这个式子最小(\(\mu=\frac{\sum_{i=1}^ma_i}{m}\)是平均数,\(a_i\)为第\(i\)段的和): \[\frac{\sum_{i-1}^m(\ ...

  6. 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名

    [题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...

  7. CI Weekly #22 | flow.ci 新版 iOS 构建流程的 4 大变化

    好久不见,最近 flow.ci 针对 iOS 项目重新设计了创建项目的流程,较之前相比有 4 个变化: 在创建项目阶段加入项目有效性检测,大大减少了构建失败率,有问题早发现! 在创建项目阶段加入项目配 ...

  8. BZOJ4205 : 卡牌配对

    对于两张卡牌,如果存在两种属性值不互质,则可以匹配. 只考虑200以内的质数,一共有46个,可以新建3*46*46个点来表示一类属性值中有这两种质数的卡牌. 然后对于每张卡牌,枚举它的质因子,最多只有 ...

  9. phpexcel错误 You tried to set a sheet active by the out of bounds index: 1解决办法

    $objPHPExcel->createSheet($k);

  10. 针对MyISAM锁表的解决方案

    最近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql.使用show status like 'table%'检 ...