【C++】异常处理 ② ( 异常捕获类型 | 异常捕获机制 - 严格匹配异常类型 | 未知异常捕获 - 不知道异常类型 )

news2024/9/24 13:16:16

文章目录

  • 一、异常捕获机制 - 严格匹配异常类型
    • 1、异常捕获机制 - 严格匹配异常类型
    • 2、代码示例 - 异常捕获严格匹配异常类型
  • 二、异常捕获机制 - 未知异常捕获
    • 1、未知异常捕获 - 不知道异常类型
    • 2、代码示例 - 未知异常捕获





一、异常捕获机制 - 严格匹配异常类型




1、异常捕获机制 - 严格匹配异常类型


异常机制函数机制 是 互不干涉的两个系统 ,

  • 函数参数 的 匹配机制 是 形参 与 实参 进行匹配 ,
  • 异常捕获 的 匹配机制 是 基于 抛出的异常类型进行匹配 ;

注意 区分 异常捕获函数参数匹配 , 异常捕获 匹配的是 抛出的异常类型catch 分支中要捕获的异常类型 ;


异常捕获 , 严格按照类型进行匹配 ,

  • 如 : 在 catch 分支 中 捕获 short / int 类型的异常 , 是无法拦截到 char 类型异常的 ;

2、代码示例 - 异常捕获严格匹配异常类型


代码示例 :

#include "iostream"
using namespace std;

// 1. 在 函数 中 抛出异常
void fun(int a) {
	if (a == 0) {
		// 抛出一个 char 类型的异常
		throw 'A';
	}
}

int main() {

	// 2. 捕获并处理异常
	try
	{
		// 调用可能产生异常的函数
		fun(0);
	}
	// 抛出 char 类型的异常 , 捕获 int 类型异常是无法拦截到异常的
	// 此处程序会崩溃
	catch (int e)
	{
		cout << "捕获到异常 : " << e << endl;
	}

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

0x75D5D8A2 处(位于 HelloWorld.exe 中)有未经处理的异常: Microsoft C++ 异常: char,位于内存位置 0x0077F73B 处。

在这里插入图片描述





二、异常捕获机制 - 未知异常捕获




1、未知异常捕获 - 不知道异常类型


上面的案例中 , 抛出了 char 类型的异常 ‘A’ , 在 catch 分支中拦截的是 int 类型的异常 ,

也就是 没有拦截到 抛出的 char 类型异常 , 该函数是 main 函数 , 已经是最顶层的函数 ,

main 函数中 , 如果出现异常没有处理 , 应用程序直接崩溃 ;


应对该问题的方法是 , 拦截 未知异常 类型的 异常 ,

要捕获未知类型的异常 , 可以 使用 catch ( … ) 分支 , 这个catch块可以匹配任何类型的异常 , 可以拦截所有类型的异常 ,

因此无论try块中抛出什么类型的异常,都会被这个catch块捕获并处理。

使用 catch ( … ) 分支 , 可以拦截所有类型的异常 , 相当于 Java 中的 Exception 异常父类 ;


下面的代码 , 可以捕获一切类型的异常 ;

	// 捕获一切类型异常
	try
	{
	}
	catch ( ... )
	{
		cout << "捕获到未知类型异常 ... "<< endl;
	}

2、代码示例 - 未知异常捕获


代码示例 : 在下面的示例中 ,

  • 首先 , 使用 throw 关键字 抛出了一个 char 类型的异常 ;
  • catch (int e) 代码块中 , 可以捕获 int 类型异常 , 不能捕获 char 类型的异常 ;
  • 由于 catch 代码块 中没有明确捕获 char 类型的异常 , 该 抛出的 char 类型的异常 将被第 2 个catch ( … ) 块捕获 , 并打印相关信息 ;
#include "iostream"
using namespace std;

// 1. 在 函数 中 抛出异常
void fun(int a) {
	if (a == 0) {
		// 抛出一个 char 类型的异常
		throw 'A';
	}
}

int main() {

	// 2. 捕获并处理异常
	try
	{
		// 调用可能产生异常的函数
		fun(0);
	}
	// 抛出 char 类型的异常 , 捕获 int 类型异常是无法拦截到异常的
	// 此处程序会崩溃
	catch (int e)
	{
		cout << "捕获到异常 : " << e << endl;
	}
	// 捕获一切未知类型的异常
	catch ( ... )
	{
		cout << "捕获到未知类型异常 ... "<< endl;
	}

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

执行结果 :

捕获到未知类型异常 ...
Press any key to continue . . .

在这里插入图片描述

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

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

相关文章

嵌入式Linux:配置Ubuntu系统环境和安装开发工具

目录 1、配置Ubuntu系统环境 1.1、APT下载工具 1.2、更新语言 1.3、更新本地数据库 1.4、安装VIM编辑器 1.5、Ubuntu 和 Windows 文件互传 1.6、开启NFS服务 1.7、开启SSH服务 2、安装开发工具 2.1、Ubuntu安装VSCode 2.2、Windows安装MobaXterm 安装好Ubuntu系统环…

需求不明确的情况下,测试该如何处理?

当需求不明确的情况下&#xff0c;测试团队可以采取以下措施来处理&#xff1a; 1. 与项目团队进行沟通&#xff1a;测试团队应与项目团队密切合作&#xff0c;与业务分析师、产品经理等相关人员进行沟通&#xff0c;以获取更多的需求细节和背景信息。通过与相关方的交流&…

No matching version found for @babel/compat-data@^7.23.5 处理

npm ERR! notarget No matching version found for babel/compat-data^7.23.5 处理 报错信息 npm WARN ERESOLVE overriding peer dependency npm ERR! code ETARGET npm ERR! notarget No matching version found for babel/compat-data^7.23.5. npm ERR! notarget In most …

Shopee引流妙招!Shopee产品标签重要吗?教你有效打标签引爆流量!

对Shopee平台的卖家来说&#xff0c;在新产品上架时除了要注重产品title、介绍以及图文的优化&#xff0c;还有一件事情很重要&#xff0c;那就是——产品打标签。 对于每个跨境电商卖家来讲&#xff0c;对产品打标签都是必不可少的一个运营环节 下面小宇就来告诉大家&#xf…

字符串的旋转

字符串的旋转 左旋&#xff08;逆时针&#xff09; 示例&#xff1a;abcd------>bcda 右旋&#xff08;顺时针&#xff09; 示例&#xff1a;abcd------>dabc 例&#xff1a; 输入若干个字符串&#xff08;1≤长度≤1000&#xff09;右旋转串后的n&#xff08;-长度…

芒格传奇落幕!生前最后一次谈论比特币,说了什么?

当地时间11月28日&#xff0c;知名投资公司伯克希尔哈撒韦发布声明&#xff0c;公司董事会副主席查理芒格(Charlie Munger)于当天早上在美国加利福尼亚州的一家医院去世&#xff0c;终年99岁&#xff0c;距离其百岁生日仅剩1个月。 巴菲特在一份声明中表示&#xff1a;“没有查…

Anaconda超简单安装教程,超简洁!!!(Windows环境下,亲测有效)

写下这篇文章的动机&#xff0c;是今天在装Anaconda的时候&#xff0c;本来想搜点教程按照教程一步一步安装的&#xff0c;但没想到&#xff0c;所谓“保姆级”教程呀&#xff0c;“最详细”之类的&#xff0c;好复杂。然后一些本应该详细说的反而一笔带过了。所以今天我想把我…

基于YOLOv8深度学习的安全帽目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

滴滴遭遇重击:12小时内损失千万订单量与超4亿成交额,背后有何启示?

近期&#xff0c;中国最大的出行平台之一——滴滴&#xff0c;经历了一次长达12小时的系统崩溃&#xff0c;造成了重大的经济损失。这一事件引起了广泛关注&#xff0c;并凸显出一些关键信息。本文将深入探讨此次事件中凸显的关键信息和可能的技术原因。 首先&#xff0c;滴滴作…

GeoServer改造Springboot源码四(图层管理设计)

一、界面设计 图 1图层管理列表 图 2选择图层数据源 图 3添加图层 图 4编辑图层

从setText处理来学习绘制流程

Android中TextView调用setText是会进行text文字的更新&#xff0c;是一个比较简单的画面变化&#xff0c;这可以作为一个出发点来查看绘制处理流程。这里来问问chatGPT&#xff0c;来查看大致流程 请讲讲Android中textView的setText处理流程 ChatGPT Poe 当你调用 textView.s…

【人工智能Ⅰ】实验3:蚁群算法

实验3 蚁群算法的应用 一、实验内容 TSP 问题的蚁群算法实现。 二、实验目的 1. 熟悉和掌握蚁群算法的基本概念和思想&#xff1b; 2. 理解和掌握蚁群算法的参数选取&#xff0c;解决实际应用问题。 三、实验原理 1&#xff0e;算法来源 蚁群算法的基本原理来源于自然界…

P1025 [NOIP2001 提高组] 数的划分

暴搜 剪枝 枚举固定的位置 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e310; int n,k; int res; void dfs(int last,int sum,int cur){if(curk){if(sumn)res;return;}for(int ilast;isum<n;i)dfs(i,sumi,cur1); } int main() {c…

DDD落地:从携程订单系统重构,看DDD的巨大价值

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

玄学调参实践篇 | 深度学习模型 + 预训练模型 + 大模型LLM

&#x1f60d; 这篇主要简单记录一些调参实践&#xff0c;无聊时会不定期更新~ 文章目录 0、学习率与batch_size判断1、Epoch数判断2、判断模型架构是否有问题3、大模型 - 计算量、模型、和数据大小的关系4、大模型调参相关论文经验总结5、训练时模型的保存 0、学习率与batch_s…

抑制过拟合——Dropout原理

抑制过拟合——Dropout原理 Dropout的工作原理 实验观察 在机器学习领域&#xff0c;尤其是当我们处理复杂的模型和有限的训练样本时&#xff0c;一个常见的问题是过拟合。简而言之&#xff0c;过拟合发生在模型对训练数据学得太好&#xff0c;以至于它捕捉到了数据中的噪声和…

热烈欢迎省工信厅毛郑建处长莅临公司调研指导工作

2023年11月28日&#xff0c;河南省工信厅信息化和软件服务业处毛郑建处长莅临郑州埃文计算机科技有限公司&#xff08;以下简称“埃文科技”&#xff09;调研考察工作。河南省工业信息安全产业发展联盟理事长任传军陪同调研。 首先&#xff0c;埃文科技董事长王永向毛处长介绍埃…

开源运维监控系统-Nightingale(夜莺)应用实践(未完)

一、前言 某业务系统因OS改造,原先的Zabbix监控系统推倒后未重建,本来计划用外部企业内其他监控系统接入,后又通知需要自建才能对接,考虑之前zabbix的一些不便,本次计划采用一个类Prometheus的监控系统,镜调研后发现Nightingale兼容Prometheus,又有一些其他功能增强,又…

JDK 动态代理从入门到掌握

快速入门 本文介绍 JDK 实现的动态代理及其原理&#xff0c;通过 ProxyGenerator 生成的动态代理类字节码文件 环境要求 要求原因JDK 8 及以下在 JDK 9 之后无法使用直接调用 ProxyGenerator 中的方法&#xff0c;不便于将动态代理类对应的字节码文件输出lombok为了使用 Sne…

孩子都能学会的FPGA:第十七课——用FPGA实现定点数的乘法

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…