C++的异常处理机制

news2024/11/14 21:52:01

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.coloradmin.cn/o/1915022.html

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

相关文章

【SWMM】模型概述及软件安装

SWMM模型概述及软件安装 SWMM 模型 (Storm Water Management Model)概述应用 软件安装及下载参考 暴雨管理模型 (Storm Water Management Model,SWMM 模型)是美国环保局为解决日益严重的城市排水问题而推出的暴雨径流管…

凌风云 - 十大网盘资源搜索 Ver 6.0 版正式上线

《凌风云》作为网盘资源专业搜索领域的佼佼者,汇聚了国内十大网盘的丰富资源,凌风云搜索弥补其他搜索引擎可能无法搜索到相关资源的缺陷,作为专业的搜索引擎服务网络平台,您只需输入关键词,通过智能算法精准匹配&#…

C++的介绍与认识

目录 前言 1.什么是C 2.C的发展历史 3.C参考文档 4.C重要性 4.1C特点 4.2编程语言排行榜 4.3 C的应用领域 5.C学习指南 1. 基础知识 2. 面向对象编程(OOP) 3. 泛型编程 4. 标准库(STL) 结束语 前言 学习了C语言的知识…

使用mid360进行fast_lio建图、octomap生成栅格地图

前面我已经实现了fast_lio建图并使用octomap转为三维栅格地图,今天来填上次留的坑 使用Livox-Mid360激光雷达,复现FAST_LIO(保姆级教程)-CSDN博客 这是我上次写的,来复现上次失败的,这个教程:…

【PHP安装内置扩展】

PHP安装内置扩展 1、首先查看php源码以及查询是否有需要的扩展;本次以zlib扩展为例子 2、进入需要安装的扩展目录,执行命令 cd zlib 执行 make clean 清掉之前的安装的残留文件; 不需要的话直接略过,新安装也略过3、运行phpize,执行/usr/local/php/bin/phpize 注意这个路径一…

设计分享—国外后台界面设计赏析

国外后台界面设计将用户体验放在首位,通过直观易懂的布局和高效的交互设计,提升用户操作效率和满意度。 设计不仅追求美观大方,还注重功能的实用性和数据的有效展示,通过图表和图形化手段使数据更加直观易懂。 采用响应式布局&a…

Windows 部署ollama

一、简介 Ollama是在Github上的一个开源项目,其项目定位是:一个本地运行大模型的集成框架,目前主要针对主流的LLaMA架构的开源大模型设计,通过将模型权重、配置文件和必要数据封装进由Modelfile定义的包中,从而实现大模…

[GICv3] 3. 物理中断处理(Physical Interrupt Handling)

中断生命周期 ​​ 外设通过中断信号线生成中断,或者软件生成中断(SGI)。Distributor 和 ReDistributor 配合按照中断分组和中断优先级仲裁后将最高优先级的中断分发到 CPU interface。cpu interface 向中断发送到 PEPE 读取 IAR 寄存器&am…

队列+二叉树广度优先

题目出自力扣-n叉树的层序遍历 我是原始人,递归写出一道题就只有递归思路,开始的想法是写深搜函数,传一个随着层数递增的int参数q,节点空就return,否则遍历所有节点,每个子节点又以q1为层数递归&#xff…

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档:全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本:11以下,比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

15.x86游戏实战-汇编指令jmp call ret

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

从零开始学习嵌入式----Linux系统中shell脚本

目录 Shell脚本入门:玩转功能语句和数组,提升你的效率! 一、功能语句:让你的脚本更灵活 1. 条件语句:if、else、elif 2. 循环语句:for、while 二、数组:处理多项数据的好帮手 1. 声明数组…

程序员学长 | PyCaret,一个超强的 python 库

本文来源公众号“程序员学长”,仅用于学术分享,侵权删,干货满满。 原文链接:PyCaret,一个超强的 python 库 今天给大家分享一个超强的 python 库,PyCaret。 https://github.com/pycaret/pycaret 简介 …

力扣 160相聚链表

注意 判断是否有交点 用while(A! B) 其中A A nullptr? headb:A->next;B同理 注意,while循环的退出条件是AB指针指向同一个,如果没有相交,仍然可以退出 当AB都为NULLPTR时退出

包成功安装tiny-cuda-nn,记录安装过程中的问题解决,附带pytorch3d安装【踩坑指南】

tiny-cuda-nn安装过程中的问题解决,附带pytorch3d安装【踩坑指南】 前言tiny-cuda-nn第一种下载方法:命令行安装tiny-cuda-nn第二种下载方法:本地编译 pytorch3d安装 前言 official repo: https://github.com/NVlabs/tiny-cuda-nn 该包可以显…

【记录】LaTex|LaTex 代码片段 Listings 添加带圆圈数字标号的箭头(又名 LaTex Tikz 库画箭头的简要介绍)

文章目录 前言注意事项1 Tikz 的调用方法:newcommand2 标号圆圈数字的添加方式:\large{\textcircled{\small{1}}}\normalsize3 快速掌握 Tikz 箭头写法:插入点相对位移标号node3.1 第一张图:插入点相对位移3.2 第二张图&#xff1…

(2024,测试时训练(TTT),线性注意力,RNN,嵌套循环)学习(在测试时学习):具有表达性隐藏状态的 RNN

Learning to (Learn at Test Time): RNNs with Expressive Hidden States 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. 方法 2.1 使用 TTT 更新隐藏状态 2.2 …

通勤数据:Comma2k19 数据集

A Commute in Data: The comma2k19 Dataset 通勤数据:Comma2k19 数据集 https://arxiv.org/pdf/1812.05752v1 Abstract— comma.ai presents comma2k19, a dataset of over 33 hours of commute in California’s 280 highway. This means 2019 segments, 1 minut…

节点流与处理流:深入解析Java中的IO流

节点流与处理流:深入解析Java中的IO流 1、节点流(Node Stream)1.1 定义1.2 好处1.3 示例 2、处理流(Processing Stream)2.1 定义2.2 好处2.3 创建特征2.4 示例 3、总结 💖The Begin💖点点关注&…

【多线程】线程同步--条件变量的原理及其使用

文章目录 前言线程同步的基本概念条件变量定义条件变量初始化条件变量销毁条件变量等待条件(重要)唤醒等待简单运用常见使用条件变量的格式 前言 线程同步意味着在多线程并发执行中,协调线程之间的执行顺序,以确保共享资源被正确…