C++ (14) 异常处理
- 程序常见的错误
- 语法错误/编译错误:比如关键字拼写错误,变量名未定义,语句末尾缺少分好,括号不匹配,不能找到头文件......
- 运行错误/:程序在运行过程中出现错误:例如除数为零,访问地址非法,输入数据有误......
- 异常处理的方法
- 如果执行一个函数过程中出现异常,如果本函数没有异常处理,就逐级向上抛出一个异常信息。最高一级也无法处理,最后异常终止程序执行。
- 异常处理中的三分部分:
- 检查:try
- 抛出:throw
- 捕获:catch
- 异常处理的形式:
- try-catch结构
- try
- {被检查的语句或者函数}
- catch (异常信息类型 [变量名]) // 变量为可选,用来接受抛出的数据
- {进行异常处理的语句}
- throw语句:
- throw 数据; // 放在被检查的语句或者函数中
- 注意:
- 被检查的语句和函数必须放在try模块中
- try 和 catch 作为一个整体出现,中间不能插入其他语句
- try 和 catch 模块必须用花括号括起来
- 一个 try-catch 结构可以只有一个try模块,单可以有多个catch模块
- catch(...):代表捕获类型未指定,它可以捕获任何类型的异常信息
- “throw;” 表示"当前try语句不出了这个异常,请上级处理",例如
- try
- {
- throw double(2.0);
- }
- catch (double)
- {
- throw;
- cout << "This sentence will not be printed out!" << endl;
- }
- 如果throw抛出的语句找不到与之匹配的catch模块,那么系统就会调用terminate函数终止程序。
- try-catch结构
- 在函数声明中进行异常情况指定
- 为了便于阅读,在声明函数时列出可能抛出的异常情况:
- double triangle(double, double, double) throw(double);
- double triangle(double, double, double) throw(int, double, float, char); // 表示可以抛出四种类型的异常
- double triangle(double, double, double) throw(); // 声明一个不抛出异常的函数,即使函数内有throw语句也不执行。
- 为了便于阅读,在声明函数时列出可能抛出的异常情况:
- 在异常处理中处理析构函数:
- 在执行try模块过程中发生异常,成员会离开try模块(如果try模块中调用函数,则程序先离开该函数,回到try模块),这样流程就有可能离开该对象的作用于而转到其他函数,因而应当事先做好结束对象前的清理工作。
- 举例:
#include <strstream> #include <iostream> #include <stack> using namespace std;int main() {void f1();try{f1();}catch(double){cout << "OK0" << endl;}cout << "end0" << endl;return 0; }void f1() {void f2();try{f2();}catch(char){cout << "OK1" << endl;}cout << "end1" << endl; }void f2() {void f3();try{f3();}catch(int){cout << "OK2" << endl;}cout << "end2" << endl; }void f3() {double a = 0;try{throw a;}catch (float) // 结果OK0 end0 // catch (double) // OK3 end3 end2 end1 end0 {cout << "OK3" << endl; // throw; // 将a直接抛出,最后结果 OK3 OK0 end0 }cout << "end3" << endl; }
View Code
转载于:https://www.cnblogs.com/xumengpiaoyun/p/3554524.html
C++ (14) 异常处理相关推荐
- java程序实现按并发数收费_java-实战java高并发程序设计-ch3JDK并发包
JDK 并发包 3.1 多线程的同步协助:同步控制 3.1.1 synchronized 扩展功能:重入锁 jdk1.5之前重入锁ReentrantLook性能好于synchronized, 但jdk ...
- [译] ROS C++ 代码规范
内容说明 : 文章内容翻译自ROS Wiki,也引用了部分<代码整洁之道>书中的内容. ROS C++代码规范与谷歌C++代码规范有诸多相似之处,本文主要讲述在编写ROS C++代码时需要 ...
- Mini 容器学习笔记4——组件的生命周期(应用篇)
Mini容器支持6中生命周期类型: 1. Singleton :单利类型(缺省组件都是单利类型的生命周期,由容器进行托管的) [Test]public void SingletonLifestyleT ...
- python 爬虫 selenium
Selenium 个人学习笔记 准备工作 一: 安装Chrome浏览器 二: 根据你浏览器的版本号下载 ChromeDriver (笔者的版本号是 76.0.3809.100) ChromeDrive ...
- Mini 容器学习笔记6——组件的获取(应用)
1. 通过组件Id获取组件实例: [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person ...
- python基础(文件、异常、模块、类、对象)
文件: 打开文件使用open函数,open()的第一个参数是:要打开文件的路径,如果只传入文件名那么将在当前文件下查找文件并打开.第二个参数是:文件的打开模式,其他参数都是默认的.文件的打开模式如下图 ...
- [转载] python学习笔记
参考链接: Python | a += b并不总是a = a + b 官网http://www.python.org/ 官网library http://docs.python.org/librar ...
- OASIS协议标准文档的解读_第一部分
译者注: 利用2022年圣诞假期,终于解读完OASIS标准协议的文档.本翻译文档基于SEMI 草案标准 3626 (2003/04/23). 因为SEMI的原版标准草案涉及到版权的一些问题,并不是 ...
- 03-Mono Flux操作
上一节主要介绍了如何基于Mono和Flux构建一个数据流,Mono是Flux的特例,但大部分API 都是一致的所以重点讲的是Flux.本章将讲Flux和Mono的操作符,如 转换.过滤.异常处理.日志 ...
最新文章
- 28岁硕士女程序员想分手!对象专科学历,北京土著,失业3个月找不到工作!遭网友群嘲!...
- 复习笔记(五)——C++多态和虚函数
- IDC:2015年全球专用备份一体机市场稳健增长
- Redis的安装与简单部署
- 《人月神话》阅读体会(二)
- Spring3向Spring4升级过程中quartz修改
- 证明创建runnable实例和普通类时间一样长
- 85. Maximal Rectangle
- 《零基础》MySQL LIKE 子句(十六)
- Hibernate4.3基础知识2
- Webwork2之Action Result Type(转载)
- 顺丰同城通过港交所聆讯 今年前五个月收入为30.46亿元
- 科创板鸣锣开市 一图带你了解首批25家公司
- H3C 路由器 与 CISCO 路由器在配置上的差别
- 金蝶eas怎么引出凭证_金蝶专业版如何引入引出凭证
- 服务器虚拟机声卡无法加载,Esxi虚拟机添加声卡
- photoshop cs6 界面字体太小解决方法
- 将分类图像转换为ERDAS可识别的专题图像(Continuous to Thematic)
- c语言程序0到1000的素数,C语言实现之100-1000以内素数的等差数列
- 2021年中国示波器行业及细分产品数字示波器市场现状分析[图]
热门文章
- 加载dict_PyTorch 7.保存和加载pytorch模型的两种方法
- java 命令 乱码_解决java 命令行乱码的问题
- 一看就会的OSPF路由协议综合实验
- 分享丨10年DBA老司机整理的Oracle学习路线图
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
- unet论文_图像分割之RefineNet 论文笔记
- 教你如何用python表白_情人节来了,教你个用 Python 表白的技巧
- 中职学校的学生计算机基础较弱,中职学校计算机专业教学的现状分析及对策探究.doc...
- 本地服务器模板网站怎么安装,本地服务器怎样安装帝国CMS模版网站
- 双目视觉——SGM中的动态规划