C++ exception类

++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception)。你可以通过下面的语句来匹配所有标准异常:
  1. try{
  2. //可能抛出异常的语句
  3. }catch(exception &e){
  4. //处理异常的语句
  5. }
之所以使用引用,是为了提高效率。如果不使用引用,就要经历一次对象拷贝(拷贝对象时要调用拷贝构造函数)的过程。

exception 类位于 <exception> 头文件中,它被声明为:
纯文本新窗口
  1. class exception {
  2. public:
  3. exception () throw(); //构造函数
  4. exception (const exception&) throw(); //拷贝构造函数
  5. exception& operator= (const exception&) throw(); //运算符重载
  6. virtual ~exception() throw(); //虚析构函数
  7. virtual const char* what() const throw(); //虚函数
  8. }
这里需要说明的是 what() 函数。what() 函数返回一个能识别异常的字符串,正如它的名字“what”一样,可以粗略地告诉你这是什么异常。不过C++标准并没有规定这个字符串的格式,各个编译器的实现也不同,所以 what() 的返回值仅供参考。

下图展示了 exception 类的继承层次:


先来看一下 exception 类的直接派生类:

异常名称 说  明
logic_error逻辑错误。
runtime_error运行时错误。
bad_alloc使用 new 或 new[ ] 分配内存失败时抛出的异常。
bad_typeid使用 typeid 操作一个 NULL 指针,而且该指针是带有虚函数的类,这时抛出 bad_typeid 异常。
bad_cast使用 dynamic_cast 转换失败时抛出的异常。
ios_base::failureio 过程中出现的异常。
bad_exception这是个特殊的异常,如果函数的异常列表里声明了 bad_exception 异常,当函数内部抛出了异常列表中没有的异常时,如果调用的 unexpected() 函数中抛出了异常,不论什么类型,都会被替换为 bad_exception 类型。

 logic_error 的派生类: 
异常名称 说  明
length_error试图生成一个超出该类型最大长度的对象时抛出该异常,例如 vector 的 resize 操作。
domain_error参数的值域错误,主要用在数学函数中,例如使用一个负值调用只能操作非负数的函数。
out_of_range超出有效范围。
invalid_argument参数不合适。在标准库中,当利用string对象构造 bitset 时,而 string 中的字符不是 ’0’ 或 ’1’ 的时候,抛出该异常。

runtime_error 的派生类: 
异常名称 说  明
range_error计算结果超出了有意义的值域范围。
overflow_error算术计算上溢。
underflow_error算术计算下溢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拿了年终奖后,发现自己又拖后腿了?对不起,可能事实并没有那么糟糕...

全世界只有3.14 % 的人关注了爆炸吧知识不平凡的2020年早已过去了&#xff0c;打工人们已经跨过了2021年的门槛。2021年将会怎么样&#xff0c;那只有到2021年结束后我们才会知道。但我们的情绪常常毫无例外地会被“年终奖”这个关键词所扰动&#xff0c;无论在什么时候&#x…

JAVA-MyBatis ORM

MyBatis 的前身就是 iBatis 。是一个数据持久层(ORM)框架。 iBATIS一词来源于“internet”和“abatis”的组合&#xff0c;是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects&#xff08;DAO&#xff09;&#xff0c;同时还提供一个利用这…

AMD and CMD are dead之KMD.js依赖可视化工具发布

使用 require("MyAapp.DepTree", function (DepTree) {DepTree(({renderTo: "holder",width: "820",height: "580",data: [{ "name": "System" },{ "name": "Util" },{ "name": &q…

WPF中的触发器(Trigger)

这节来讲一下WPF中的触发器——Trigger。触发器&#xff0c;是指在既定条件或者特殊场景下被触发&#xff0c;从而去执行一个操作。在WPF中&#xff0c;触发器可以分为以下几类&#xff1a;基本触发器(Trigger)&#xff1b;事件触发器(EventTrigger)&#xff1b;数据触发器(Dat…

数学之美番外篇:平凡而又神奇的贝叶斯方法

概率论只不过是把常识用数学公式表达了出来。 ——拉普拉斯 记得读本科的时候&#xff0c;最喜欢到城里的计算机书店里面去闲逛&#xff0c;一逛就是好几个小时&#xff1b;有一次&#xff0c;在书店看到一本书&#xff0c;名叫贝叶斯方法。当时数学系的课程还没有学到概率统计…

linux red hat 安装svn

安装步骤如下&#xff1a;1、yum install subversion 2、输入rpm -ql subversion查看安装位置&#xff0c;如下图&#xff1a;我们知道svn在bin目录下生成了几个二进制文件。输入 svn --help可以查看svn的使用方法&#xff0c;如下图。3、创建svn版本库目录mkdir -p /var/svn/s…

驰骋表单设计器 设计表单案例演示

为什么80%的码农都做不了架构师&#xff1f;>>> 我们以客户提供如下原始的word表单样本&#xff0c;使用驰骋表单设计器制作表单的过程介绍如下:工业设计和创意需求登记表原始表单图 在ccform表单设计器中&#xff0c;设计如下&#xff1a; 驰骋表单设计器&#xf…

这个避孕套让生活更和谐……

1 三连暴击▼2 开塞露还能这样用&#xff1f;▼3 这真不是打架&#xff1f;▼4 送礼佳品&#xff0c;必拉黑神器&#xff01;▼5 孩子&#xff1a;爹妈&#xff0c;真的可以再考虑一下的......▼6 四只手才能拆的避孕套▼7 谭警官&#xff1a;莫挨我&#xff01;&#xff…

WPF GridControl控件的用法举例

01—前言WPF中自带的表格控件是DataGrid&#xff0c;但是格式并不是很美观&#xff0c;我们一般用Dev中类似的控件GridControl来取代&#xff0c;这个控件功能相当强大。WPF数据网格&#xff08;GridControl&#xff09;是一个数据感知控件&#xff0c;用于以不同的布局显示和编…

推荐我看过的几本好书给大家!(2)

继续从亚马逊盗图&#xff01;哈哈&#xff01; 这本书感觉很不错&#xff0c;对于算法&#xff0c;个人觉得还是需要掌握的&#xff0c;毕竟你不可能一辈子都做最底层的程序员吧&#xff0c;想要获得提升&#xff0c;一方面是经验的积累&#xff0c;另外一方面则是一种厚积薄发…

activemq安全设置 设置admin的用户名和密码

ActiveMQ使用的是jetty服务器, 打开conf/jetty.xml文件&#xff0c;找到 <bean id"securityConstraint" class"org.eclipse.jetty.http.security.Constraint"> <property name"name" value"BASIC" /> <p…

转:IOS开发之----Xcode非ARC项目中设置部分文件ARC支持

ARC是什么 ARC是iOS 5推出的新功能&#xff0c;全称叫 ARC(Automatic Reference Counting)。简单地说&#xff0c;就是代码中自动加入了retain/release&#xff0c;原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机制在 iOS 5/ Mac OS X 10.…

C# ActionT和 FuncT委托

除了为每个参数和返回类型定义一个新委托类型之外&#xff0c;还可以使用 Action<T> 和 Func<T>委托。泛型 Action<T>委托表示引用一个 void 返回类型的方法。这个委托类存在不同的变体&#xff0c;可以传递至多 16 种不同的参数类型。没有泛型参数的 Action…

linux学习-简单命令介绍及安装VMware Tools

常用简单命令介绍 ethernet以太网pts&#xff1a;模拟终端图形界面&#xff1a;CtrlAltF1 字符界面&#xff1a;CtrlAltF2-F6切换虚拟终端&#xff1a;&#xff08;本机操作&#xff09;# chvt 1-6关闭图形界面,在纯字符界面下操作&#xff1a; init 3打开图形界面&#xff…

Unity手游之路lt;七gt;角色控制器

我们要控制角色的移动&#xff0c;能够所有细节都由自己来实现。控制角色模型的移动&#xff0c;同一时候移动摄影机&#xff0c;改变视角。当然Unity也提供了一些组件&#xff0c;能够让我们做更少的工作&#xff0c;实现我们所期望的功能。今天我们就一起系统来学习相关的内容…