程序中try、throw、catch三者之间的关系
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三者之间的关系相关推荐
- dpi与dp的关系_Android中 dp,px,dpi三者之间的关系
首先弄明白三个概念 dp/dip(Density-independent pixel ) 设备独立像素(是一个关联Density和pixel的虚拟像素单位) dpi (dots per inch) 每 ...
- java中setSize(),setLocation(),setBounds三者之间的关系和用法
开始学习java,感觉有好多小的东西都需要去进行总结,唉,没办法,既然选择了java那就一步一步来吧!加油! setSize(int width,int heigth): 就是定义控件的大小,setS ...
- anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系
一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
- 甲方、乙方、监理三者之间的关系及其在项目管理过程中的若干事项
1.甲方.乙方.监理三者之间的关系 甲方是工程项目的投资单位和受方单位,乙方是工程项目的承建单位和供方单位,监理是工程项目的监管单位和第三方单位.广义方面来讲,监理也属于乙方的范畴,是服务的提供者.从 ...
- PHP-FPM,Nginx,FastCGI 三者之间的关系
2019独角兽企业重金招聘Python工程师标准>>> 本文介绍 PHP-FPM,Nginx,FastCGI 三者之间的关系,以及 Nginx 反向代理和负载均衡的配置. PHP-F ...
- python和pycharm之间的关系_浅析python,PyCharm,Anaconda三者之间的关系
一.它们是什么? 1.python Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一 ...
- 一次性掌握JDK、JRE、JVM的概念以及三者之间的关系【2021整理】
一.JDK.JRE.JVM概念解析 JDK(Java Development Kit):Java开发工具包,开发人员用来构建Java应用程序的软件包. JRE(Java Runtime Environ ...
- Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)
文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...
最新文章
- 通过产品ID得到collection!!!
- LeetCode 236. 二叉树的最近公共祖先
- 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
- 在Web界面中实现Excel数据大量导入的处理方式
- 在Eclipse中集成Ant编程之配置篇
- head first系列PDF资源
- Linux下Web效力器架设攻略-1
- python treeview底部加个按钮_Python爬取京东商品信息(GUI版本)
- 如何编译 dotnet/runtime 源代码
- 一维数组和二维数组的区别_数组指针和指针数组的区别
- Linux下之使用简单3种创建文件的命令,并实现一个Html和JavaScript小程序
- 微软Patterns Practices发布Windows Azure指南第三部分——构建混合应用
- hdu-2032杨辉三角
- ★大脑的9大未解之谜
- 如何使用 iMovie 为影片添加字幕、综艺字?
- 灰狼优化算法与影响力最大化问题
- matlab安装打不开(一个黑框一闪而过)解决办法!
- 斑马打印机linux驱动安装教程,linux-Zebra软件包的基本安装与配置
- VSCode XML文件格式化
- 软件可靠性工程研讨会报告
热门文章
- proc wifi 开启_49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)...
- vs的离线下载.iso文件_Windows10官方纯净系统下载
- Codeforces Round #772 (Div. 2) C. Differential Sorting(思维+构造)
- AcWing 827. 双链表
- java如何实现下载_java 如何实现下载功能
- php调用成员函数错误,PHP致命错误:在非对象上调用成员函数exec...
- python 保存dataframe_在python2中将dataframe保存到CSV
- Yarn无法查看日志: Aggregation may not be complete, Check back later or try the nodemanager at xxxx:xxxx
- LoadingCache源码剖析之缓存加载实现
- OpenCV基本图形绘制之绘制直线