C++的异常处理机制

C++的异常处理机制

    • (1)Why(异常处理机制的作用)
    • (2)How(异常机制如何工作)
      • A.抛出异常
      • B.捕获异常
      • C.处理异常
      • D.传递异常
    • (3)抛出异常
      • A.栈展开
      • B.析构函数和异常
      • C.异常对象
    • (4)捕获异常
    • (4)处理异常
      • A.构造函数的异常处理
      • B.不抛出异常noexcept
      • C.noexcept运算符

(1)Why(异常处理机制的作用)

异常处理机制的目标是在异常情况发生时,能够捕获并处理这些异常,使程序能够进行适当的恢复或终止,并提供相应的错误信息

通过使用异常处理机制,可以改善程序的健壮性和可维护性,使程序更加可靠和可预测

(2)How(异常机制如何工作)

A.抛出异常

通过使用 throw 关键字抛出一个异常对象。异常对象可以是内置类型、自定义类型或标准库提供的异常类的实例

B.捕获异常

try 和 catch 捕获异常,使用 try 块来捕获异常。try 块后跟一个或多个 catch 块,每个 catch 块用于捕获特定类型的异常

C.处理异常

当发生异常时,如果能够匹配到相应类型的 catch 块,程序将进入匹配的 catch 块, 并执行其中的异常处理代码。异常处理代码可以根据需要进行恢复操作、输出错误信 息、记录日志等

D.传递异常

如果一个异常没有在当前的 try-catch 块中得到捕获,它将被传递给上层调用的 try-catch 块,直到找到匹配的 catch 块或者到达程序的顶层

注意:一个异常如果没有被捕获到,它将终止程序的执行过程(调用标准库函数 terminate)

(3)抛出异常

A.栈展开

如果 try 语句块嵌套使用,其本质是一个栈展开的形式

B.析构函数和异常

析构函数一定会被执行,但是函数中负责释放资源的代码却可能因为异常而被跳过, 因此考虑使用类来管理资源是一个非常不错的选择,它能确保无论是否发生异常,都 能释放资源。所有的标准库类型都能确保它们的析构函数不会引发异常

C.异常对象

异常对象位于编译器所管理的空间当中,编译器确保无论最终调用哪个 catch 子块都能 访问该异常对象;当异常处理完毕后,异常对象被销毁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)捕获异常

  • catch 的参数最好定义成引用类型
  • catch 的参数类型存在继承关系时候,子孙类放在最前面
  • 重新抛出:上一个catch处理完之后,catch会调用throw重新抛出传递给下一个catch
    在这里插入图片描述

捕获所有异常:

一次性捕获所有异常 catch(…),可以与任意类型的异常匹配

在这里插入图片描述

(4)处理异常

A.构造函数的异常处理

当构造函数的初始值列表发生异常时,构造函数内的 try 语句还没有生效

在这里插入图片描述

B.不抛出异常noexcept

作用:用于指定某函数不跑出异常

位置:

在这里插入图片描述

C.noexcept运算符

用于判断函数时候抛出异常(函数后有没有被noexcept修饰)

在这里插入图片描述
说明:noexcept既是异常说明符也是运算符

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

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

相关文章

【Oracle】Oracle数据库中的数据类型

目录 数值类型字符类型CHAR(size):定长字符数据。VARCHAR2(size):可变长字符数据LONG:可变长字符数据,最大可达到 2GNCHAR [( size )] 类型NVARCHAR2( size ) LOB类型(二进制类型)CLOB:字符数据…

Oracle各种连接写法介绍

1、左连接 左连接(左外连接): 基表全部查出来,外连接表有的匹配,没有则为null; 记录数与基表的记录数相同,前提是where后未加条件过滤; 两种写法(left join&#xff09…

中小学校园EasyCVR视频综合监管方案:构建安全、智能的校园环境

一、背景需求分析 随着科技的快速发展,校园安全问题日益受到社会各界的关注。尤其是在中小学校园中,学生的安全更是牵动着每一个家庭的心。为了更有效地保障学生的安全,提高校园安全管理水平,视频监控系统在中小学中的应用越来越…

伙伴活动|AI硬件大潮来袭,深圳的创客们在哪里?

「每一种硬件产品,都会被 GenAI 重新做一遍。」 分享一个社区伙伴「未来光锥」参与主办的活动。如果你同时对 AI 和硬件感兴趣,提到 maker 一词仍然会激动。推荐你参与这次活动。 AI 玩具Folotoy 的创始人、RTE 开发者社区成员王乐也将参与本次活动并分…

【C++进阶】C++中的IO流

目录 前言 1. C语言中的IO 2. 如何理解流 3. C中的IO流 3.1 C中的标准IO 3.2 C中的文件IO 4. stringstream 总结 前言 C语言中的I/O接口十分强大,但使用起来有些繁琐。好在C中的I/O方式为我们解决了这些问题,让数据的读写操作变得更加简洁和便捷; 在…

动手学深度学习(Pytorch版)代码实践 -循环神经网络-57长短期记忆网络(LSTM)

57长短期记忆网络(LSTM) 1.LSTM原理 LSTM是专为解决标准RNN的长时依赖问题而设计的。标准RNN在训练过程中,随着时间步的增加,梯度可能会消失或爆炸,导致模型难以学习和记忆长时间间隔的信息。LSTM通过引入一组称为门…

【卡尔曼滤波器】DR_CAN 2 学习笔记:_数据融合_协方差矩阵_状态空间方程_观测器问题

【卡尔曼滤波器】2_数学基础_数据融合_协方差矩阵_状态空间方程_观测器问题 非常重要1 数据融合 data fusion 有俩秤,各自有自己的正态分布:俩秤是相互独立的:俩秤都不准,但标准差都符合正态分布 正态分布又叫做高斯分布 向左、向右 都是2, 标准差是2覆盖了68.4 %的可能:…

开启HIVE中分区表支持中文字段

进入hive表: use hive; #修改hive database编码 alter database hive default character set utf8; #修改table编码 alter table PARTITIONS default character set utf8; alter table PARTITION_KEY_VALS default character set utf8; alter table SDS default cha…

机器学习和AI智能写作对未来文案编辑的影响

欢迎关注小知:知孤云出岫 目录 机器学习和AI智能写作对未来文案编辑的影响1. 简介2. AI智能写作工具的现状3. AI智能写作的优势3.1 提高效率3.2 降低成本3.3 数据驱动的个性化 4. AI智能写作的挑战4.1 创造力和独创性4.2 道德和伦理问题4.3 技术限制 5. 行业变化5.…

【排序 - 插入排序 和 希尔排序】

插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是逐步构建有序序列。在排序过程中,它将未排序的元素逐个插入到已排序的部分中,从而在每次插入时扩展已排序序列的长度。 原理介绍 插入排序的基本思…

RAG实践:ES混合搜索BM25+kNN(cosine)

1 缘起 最近在研究与应用混合搜索, 存储介质为ES,ES作为大佬牌数据库, 非常友好地支持关键词检索和向量检索, 当然,支持混合检索(关键词检索向量检索), 是提升LLM响应质量RAG(Retri…

Ethercat这里的CRC是如何计算和使用的?

这里的CRC是如何计算和使用的? 非常好的问题。让我详细解释一下CRC在这个上下文中是如何计算和使用的: CRC 计算过程: a. 准备输入数据: 收集从开始标签到结束标签的所有字符(不包括带Crc32属性的开始标签)。将这些字…

Java 8革新:现代编程的全新标准与挑战

文章目录 一、方法引用二、接口默认方法三、接口静态方法四、集合遍历forEach()方法 一、方法引用 方法引用是Java 8中一种简化Lambda表达式的方式,通过直接引用现有方法来代替Lambda表达式。 方法引用使得代码更加简洁和易读,特别是在处理函数式接口时&…

Kotlin Class

普通 Class kotlin class TestClz {val name: String "hsw"val age: Int 18 }java public final class TestClz {NotNullprivate final String name "hsw";private final int age 18;NotNullpublic final String getName() {return this.name;}publ…

WPF-控件样式设置

1、控件样式设置 1.1、内嵌式为相同控件设置样式 <Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"Yellow"></Setter><Setter Property"Width" Value"60"&g…

大数据专业创新人才培养体系的探索与实践

一、引言 随着大数据技术的迅猛发展&#xff0c;其在各行各业中的应用日益广泛&#xff0c;对大数据专业人才的需求也日益增长。我国高度重视大数据产业的发展&#xff0c;将大数据作为国家战略资源&#xff0c;推动大数据与各行业的深度融合。教育部也积极响应国家战略&#…

C语言 将密码译回原文

有一行电文,已按下面规律译成密码: A→Z a→z B→Y b→y C→X c→x … … 即第1个字母变成第26个字母,第i个字母变成第(26-i1)个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。 #include <stdio.h> #include <ctype.h>void decrypt(c…

JVM:字节码文件

文章目录 一、Java虚拟机的组成二、字节码文件的组成1、基本信息2、常量池3、字段4、方法5、属性 三、常用的字节码工具1、javap -v 命令2、jclasslib插件3、阿里arthas 一、Java虚拟机的组成 二、字节码文件的组成 1、基本信息 魔数、字节码文件对应的Java版本号访问标识&am…

MySQL 日期和时间函数

NOW(): 返回当前的日期和时间。 SELECT NOW() AS current_datetime; -- 结果: 当前的日期和时间 CURDATE(): 返回当前日期。 SELECT CURDATE() AS current_date; -- 结果: 当前的日期 CURTIME(): 返回当前时间。 SELECT CURTIME() AS current_time; -- 结果: 当前的…

Docker 使用基础(2)—镜像

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …