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类型异常

转载于:https://www.cnblogs.com/mydomain/p/9918055.html

程序中try、throw、catch三者之间的关系相关推荐

  1. dpi与dp的关系_Android中 dp,px,dpi三者之间的关系

    首先弄明白三个概念 dp/dip(Density-independent pixel ) 设备独立像素(是一个关联Density和pixel的虚拟像素单位) dpi (dots per inch) 每 ...

  2. java中setSize(),setLocation(),setBounds三者之间的关系和用法

    开始学习java,感觉有好多小的东西都需要去进行总结,唉,没办法,既然选择了java那就一步一步来吧!加油! setSize(int width,int heigth): 就是定义控件的大小,setS ...

  3. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  4. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  5. 甲方、乙方、监理三者之间的关系及其在项目管理过程中的若干事项

    1.甲方.乙方.监理三者之间的关系 甲方是工程项目的投资单位和受方单位,乙方是工程项目的承建单位和供方单位,监理是工程项目的监管单位和第三方单位.广义方面来讲,监理也属于乙方的范畴,是服务的提供者.从 ...

  6. PHP-FPM,Nginx,FastCGI 三者之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍 PHP-FPM,Nginx,FastCGI 三者之间的关系,以及 Nginx 反向代理和负载均衡的配置. PHP-F ...

  7. python和pycharm之间的关系_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? 1.python Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一 ...

  8. 一次性掌握JDK、JRE、JVM的概念以及三者之间的关系【2021整理】

    一.JDK.JRE.JVM概念解析 JDK(Java Development Kit):Java开发工具包,开发人员用来构建Java应用程序的软件包. JRE(Java Runtime Environ ...

  9. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)

    文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...

最新文章

  1. 通过产品ID得到collection!!!
  2. LeetCode 236. 二叉树的最近公共祖先
  3. 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
  4. 在Web界面中实现Excel数据大量导入的处理方式
  5. 在Eclipse中集成Ant编程之配置篇
  6. head first系列PDF资源
  7. Linux下Web效力器架设攻略-1
  8. python treeview底部加个按钮_Python爬取京东商品信息(GUI版本)
  9. 如何编译 dotnet/runtime 源代码
  10. 一维数组和二维数组的区别_数组指针和指针数组的区别
  11. Linux下之使用简单3种创建文件的命令,并实现一个Html和JavaScript小程序
  12. 微软Patterns Practices发布Windows Azure指南第三部分——构建混合应用
  13. hdu-2032杨辉三角
  14. ★大脑的9大未解之谜
  15. 如何使用 iMovie 为影片添加字幕、综艺字?
  16. 灰狼优化算法与影响力最大化问题
  17. matlab安装打不开(一个黑框一闪而过)解决办法!
  18. 斑马打印机linux驱动安装教程,linux-Zebra软件包的基本安装与配置
  19. VSCode XML文件格式化
  20. 软件可靠性工程研讨会报告

热门文章

  1. proc wifi 开启_49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)...
  2. vs的离线下载.iso文件_Windows10官方纯净系统下载
  3. Codeforces Round #772 (Div. 2) C. Differential Sorting(思维+构造)
  4. AcWing 827. 双链表
  5. java如何实现下载_java 如何实现下载功能
  6. php调用成员函数错误,PHP致命错误:在非对象上调用成员函数exec...
  7. python 保存dataframe_在python2中将dataframe保存到CSV
  8. Yarn无法查看日志: Aggregation may not be complete, Check back later or try the nodemanager at xxxx:xxxx
  9. LoadingCache源码剖析之缓存加载实现
  10. OpenCV基本图形绘制之绘制直线