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

文章目录

  • 一、异常捕获机制 - 严格匹配异常类型
    • 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.mzph.cn/news/186100.shtml

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

相关文章

Echarts大屏-数据可视化

使用原生htmljavascript实现大屏展示,较为麻烦的为边框的四个小角使用伪元素生成,其余echarts使用如下快速上手 - Handbook - Apache ECharts 效果如下:

【算法】状压DP-1

状压DP 介绍介绍例子 剖析P4802 [CCO2015] 路短最题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 分析Code 介绍 介绍 状态压缩就是使用某种方法&#xff0c;简明扼要地以最小代价来表示某种状态&#xff0c;通常是用一串01数字&#xff08;二进制数&#xff0…

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口&#xff0c;并测…

几种攻击方式

对抗攻击 Adversarial evasion&#xff08;对抗性逃避&#xff09;是指针对机器学习模型的一种攻击方式&#xff0c;旨在通过对输入数据进行微小但精心设计的修改&#xff0c;使模型产生错误的输出。这种攻击通常是有意识地利用模型的弱点&#xff0c;以便误导模型做出错误的决…

vuepress----1、快速开始

创建项目工程 本文会帮助你从头搭建一个简单的 VuePress 文档。如果你想在一个现有项目中使用 VuePress 管理文档&#xff0c;从步骤 3 开始。 创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter使用你喜欢的包管理器进行初始化 yarn init # npm i…

键盘打字盲打练习系列之刻意练习——1

一.欢迎来到我的酒馆 盲打&#xff0c;刻意练习! 目录 一.欢迎来到我的酒馆二.选择一款工具三.刻意练习第一步&#xff1a;基准键位练习第二步&#xff1a;字母键位练习第三步&#xff1a;数字符号键位练习 四.矫正坐姿 二.选择一款工具 工欲善其事必先利其器。在开始之前&…

井盖位移报警器安装,智能化井盖厂家推荐

当井盖发生位移或倾斜时&#xff0c;通常会引起所处道路的安全隐患&#xff0c;给过往的车辆和行人带来许多潜在的危险。为了避免潜在的安全事故频繁出现&#xff0c;及时发现并处理井盖位移或倾斜才能更好的保障人民的安全。因此安装井盖位移报警器是满足政府和市民需求的。 单…

vue项目npm install报错Failed at the fibersa4.0.3 install script

报错如下 解决&#xff1a;降低node版本 降到12.16.0 参考链接

C语言如何格式化字符串

在C语言中&#xff0c;通过使用printf函数来格式化输出字符串。格式化字符串的语法如下&#xff1a; printf("format string", argument1, argument2, ...);其中&#xff0c;format string是格式化字符串&#xff0c; argument1, argument2, … 是要输出的参数。 格…

使用 TypeScript 改进异步操作和错误处理的策略

使用 TypeScript 改进异步操作和错误处理的策略 处理异步代码是 JavaScript 应用程序的主要内容。TypeScript 为异步操作带来类型安全&#xff0c;增强可预测性并减少运行时错误。本文旨在探索我们可以利用的模式来有效地管理异步操作和错误处理。 Async/Await Async/await …

Linux下删除当前目录下的所有目录

Linux下删除当前目录下的所有目录 Linux下删除当前目录下的所有目录&#xff0c;可以使用命令&#xff1a;rm -rf ./* rm -rf ./*可以得知rm -rf ./命令是删除当前目录下的所有文件和文件夹&#xff0c;但不会删除根目录下的文件。其中&#xff0c;".“代表当前目录&…

【加密相册】 隐私协议

【加密相册】隐私协议 1.个人信息的收集和使用 我们的应用程序不会收集用户的个人信息&#xff0c;包括姓名、地址、电子邮件地址、电话号码等。我们不会追踪用户的位置信息或共享用户的个人信息。 2. 非个人化信息的收集和使用 我们的应用程序可能会收集一些非个人化信息&a…

Pycharm新手开发指南

文章目录 前言一、常用功能介绍二、常用高效pycharm使用方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言…

武汉芯源半导体首款车规级MCU,CW32A030C8T7通过AEC-Q100测试考核

近日&#xff0c;武汉芯源半导体正式发布首款基于Cortex-M0内核的CW32A030C8T7车规级MCU&#xff0c;这是武汉芯源半导体首款通过AEC-Q100 (Grade 2)车规标准的主流通用型车规MCU产品。 CW32A030C8T7通过AEC-Q100车规可靠性测试 作为武汉芯源半导体首款车规级MCU产品&#xff0…

Spring整合web环境

目录 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 Spring的web开发组件spring-web MVC框架思想及其设计思路 Javaweb三大组件及环境特点 Spring整合web环境的思路及实现 package com.xfy.listener;import com.xfy.config.SpringConfig; import org.springfra…

Linux中的fork()函数的面试题目

1.面试题目1 (1)fork 以后&#xff0c;父进程打开的文件指针位置在子进程里面是否一样&#xff1f;(先open再fork) (2)能否用代码简单的验证一下? (3)先fork再打开文件父子进程是否共享偏移量?父进程打开的文件指针位置在子进程里面是否一样&#xff1f;能否用代码简单验证一…

代理模式 1、静态代理 2、动态代理 jdk自带动态代理 3、Cglib代理

文章目录 代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cglib代理 来和大家聊聊代理模式 代理模式 代理模式&#xff1a;即通过代理对象访问目标对象&#xff0c;实现目标对象的方法。这样做的好处是&#xff1a;可以在目标对象实现的基础上&#xff0c;增强额外的功能操…

【Openstack Train安装】八、placement安装

Placement 肩负着这样的历史使命&#xff0c;最早在 Newton 版本被引入到 openstack/nova repo&#xff0c;以 API 的形式进行孵化&#xff0c;所以也经常被称呼为 Placement API。它参与到 nova-scheduler 选择目标主机的调度流程中&#xff0c;负责跟踪记录 Resource Provide…

java学校高校运动会报名信息管理系统springboot+jsp

课题研究方案&#xff1a; 结合用户的使用需求&#xff0c;本系统采用运用较为广泛的Java语言&#xff0c;springboot框架&#xff0c;HTML语言等关键技术&#xff0c;并在idea开发平台上设计与研发创业学院运动会管理系统。同时&#xff0c;使用MySQL数据库&#xff0c;设计实…

五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 &#xff08;1&#xff09;多目标粒子群优化算法MOPSO 多目标应用&#xff1a;基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度&#xff08;MATLAB代码&#xff09;-CSDN博客 &#xff08;2&#xff09;多目标人工蜂鸟算法&#xff08;MOAHA…