C++异常之异常说明
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
为了能够编写适当的catch子句,了解一个函数是否抛出异常或会抛出哪些异常对函数的用户来说是很有帮助的。
而我们可以通过 异常说明 进行对一个函数的异常进行说明, 如果函数抛出异常,被抛出的异常将是包含在该说明中的一种或是从列出的异常中派生的类型。
异常说明有如下的几种形式:
1. 指定异常
T funNname( parameterlist ) throw( T1, T2,····,Tn);
其中 T 是类型, parameterlist 是参数列表, 而类型 T1, T2,····,Tn 是函数会抛出的异常。
2. 不抛出异常
T funNname( parameterlist ) throw( );
抛出异常类型列表为空,表示的是该函数不抛出任何类型异常。
3. 抛出任意类型的异常
T funNname( parameterlist );
这表示该函数可以抛出任意类型的异常。
下面通过一段简单的代码来说明异常说明的特别之处
#include <iostream>class demo{};using namespace std; double divd(int a, int b) throw(int) //异常说明,表示函数divd会抛出类型为int的异常{ if(b == 0) throw demo(); //抛出类型为demo的异常 return a/b;}int main(){ try { divd(1,0); } catch(demo) //捕获异常类型demo { cout << " divided by zero " << endl; } catch(int) //捕获异常类型int { cout<<"zero"<<endl; } return 0;}
这段代码的运行结果是输出: divided by zero
奇怪了,在 divd 函数的声明中,只说明了抛出类型为 int 的异常,为什么其函数内抛出的异常类型却为demo呢?
我们可以暂时理解为:在某函数的异常说明中的列出的类型与该函数内抛出的异常类型不完全匹配时, 但在异常处理代码中的catch有对其类型的捕获, 所以程序运行正常。
好,下面我们根据异常说明进行一些修改
double divd(int a, int b) throw( ) //将throw(int) 改为 throw( )
修改之后,编译运行,看到的输出结果还是: divided by zero
根据上面对异常说明的三种形式介绍,我们知道在函数声明后面添加 throw()的意思是说明了此函数不会抛出任何的异常。那为什么这里抛出了而且又被捕获呢?
其实,在编译的时候,编译器不能也不会试图验证异常说明。因不能在编译时检查异常说明,异常说明的应用通常是有限的!
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
C++异常之异常说明相关推荐
- 简单介绍Go语言错误处理异常捕获+异常抛出
这篇文章主要介绍了Go语言错误处理异常捕获和异常抛出,Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运 ...
- Java异常之异常机制
2019独角兽企业重金招聘Python工程师标准>>> Java异常处理机制依赖5个关键字try,catch,finally,throw,throws.try关键字后跟着可能出现异常 ...
- python循环捕捉异常_python异常捕捉以及处理
看标题觉得高大上,好像能处理所有的异常.但是,事实是只能按照字面的意思来理解这一段话. 众所周知写代码哪有不出bug的? 那么出现了bug 我们不想让程序因为bug的存在而退出.那么要怎么做呢? 今天 ...
- java怎么捕捉除数异常_Java异常的捕获及处理---小总结
一:异常的基本概念 二:异常的基本处理格式 三:异常的继承结构 四:Java的异常处理机制 五:throws和throw关键字的作用 六:Exception和RunntimeException的区别 ...
- C++ 面向对象(三)异常 :异常概念、异常的匹配规则、异常安全、异常体系
目录 C语言传统的错误处理方法 异常的概念 异常的匹配规则 异常安全 异常规范 异常体系 C++标准库的异常体系 自定义异常体系 C语言传统的错误处理方法 在C语言中,因为没有异常这个机制,所以出现错 ...
- 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)
多态的概念: 多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果. 多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作.运行不同代码(重写 ...
- 软件测试抛出异常,异常测试之异常注入初探
背 景 常规的功能测试,主要关注业务的正常逻辑是否能够走通,往往忽视了各种异常对服务造成影响,因此需要提高异常测试的关注度.异常测试包括很多方面,有服务器系统异常.依赖服务异常.应用本身异常等. 服务 ...
- assertionerror是什么异常_php7异常与错误处理和自定义异常
7.2版本异常与错误的概述 什么叫做异常? 异常是指程序运行中不符合预期情况以及与正常流程不同的状况. 比如你链接数据库,在参数都写上去的条件下,发现链接不上去,这就属于不符合预期. 可以被 try- ...
- Java并发--ConcurrentModificationException(并发修改异常)异常原因和解决方法
Java并发--ConcurrentModificationException(并发修改异常)异常原因和解决方法 参考文章: (1)Java并发--ConcurrentModificationExce ...
- java 到异常_java编程中遇到的异常以及异常的一些处理
n 异常的概念 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户? 比如除法运算.读写文件操作,都可能 ...
最新文章
- java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...
- boost::range_const_iterato相关的测试程序
- SpringMVC的请求-文件上传-单文件上传的代码实现2
- 2014年工作中遇到的20个问题:120-140
- 许家印帮贾跃亭广州拿地造车,这是要翻身的节奏吗?
- 那些神一样的学习技巧,专治各种不服!
- Django之form表单组件、cookie与session
- Linux TCP 性能調優筆記
- ArcGIS服务器的feature图层限制
- 瑞友虚拟化系统搭建服务器,瑞友云电脑虚拟化系统 | 瑞友天翼-应用虚拟化|远程接入|桌面虚拟化|国内虚拟化整体解决方案领导者...
- android应用上架到各大应用市场总结
- 2018年华为网络技术大赛总结
- Unity遮罩简单复刻2D平台《Unbound: Worlds Apart》游离于世界之海的双重世界效果
- SCI、EI和IEEE有什么区别
- 计算机基础知识考什么,我想请问下,计算机初级考试考些什么东西?
- libsvmpredict和svmtrain的参数和返回值
- 公路多孔箱涵设计_双孔8x3.3米钢筋混凝土箱涵设计套图(19张)
- 机器学习-特征归一化
- MYSQL修改数据库密码
- 腾讯2021暑期C++天美工作室游戏开发实习面试题面经
热门文章
- datagridview绑定与详细说明 (搜集)
- 【原创】简单轻松浏览FTP
- DBeaver连接达梦|虚谷|人大金仓等国产数据库
- RabbitMQ六种队列模式-工作队列模式
- Android 生成随机数,获取一条随机字符串
- ViewPager外部获取“当前显示的页面的位置position”
- coding ssh_exchange_identification: Connection closed by remote host
- lodash 根据某个字段排序处理
- rman全备时,配置项如何设置?
- linux6.8安装图形桌面,图形/文本界面安装CentOS 6.8系统详解