当前位置: 首页 > news >正文

C++ 语法——C++11异常

一、异常的概念及使用

1.1 异常的概念

异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后解决问题的任务传递给程序的另一部分,检测环节无须知道问题的处理模块的所有细节。
C 语言主要是通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以后还要去查询错误信息,比较麻烦。异常时抛出一个对象,这个对象可以涵盖更全面的各种信息。

1.2 异常的抛出和捕获

程序出现问题时,我们通过抛出 (throw) 一个对象来引发一个异常,该对象的类型以及当前的调用链决定了由哪个 catch 的处理代码来处理该异常。被选中的处理代码是调用中与该对象类型匹配且离抛出异常位置最近的那一个。根据抛出对象的类型和内容,程序的抛出异常部分告知异常处理部分到底发生什么错误。
当 throw 执行时,throw 后面的语句将不再执行。程序的执行从 throw 位置跳到与之匹配的 catch 模块,catch 可能是同一函数中的一个局部 catch,也可能是调用链中另一个函数中的 catch 控制权从 throw 位置转移到了 catch 的位置。这里有两个重要的含义:1、沿着调用链的函数可能提早退出。2、一旦程序开始执行异常处理程序,沿着调用链创建的对象都将被销毁。
抛出异常对象后,会生成一个异常对象的拷贝,因为抛出的异常对象可能是一个局部对象,所以会生成一个拷贝对象,这个拷贝对象会在 catch 子句后销毁。

1.3 栈展开

抛出异常后,程序暂停当前函数的执行,开始寻找与之匹配的 catch 子句,首先检查 throw 本身是否在 try 块内部,如果在 try 块内部则查找匹配的 catch 语句,如果有匹配的,则跳到 catch 的地方进行处理。如果当前函数没有 try / catch 语句或者有 try / catch 子句但不匹配,则退出房当前函数继续在外层调用函数链中查找,上述查找的 catch 过程被称为栈展开。如果到达 main 函数,依旧没有找到匹配的 catch 子句,程序就会调用标准库的 terminate 函数终止程序;如果找到匹配的 catch 子句处理后,catch 子句代码继续执行。

1.4 查找匹配的处理代码

一般情况下抛出对象和 catch 是类型完全匹配的,如果存在多个类型匹配的,就选择离他位置更近的那个。但是也有一些例外,允许从非常量向常量的类型转换,也就是权限缩小;允许数组转换成指向数组元素类型的指针,函数被转换成指向函数的指针;允许从派生类向基类的转换,这个点非常实用,实际中继承体系基本都是用这个方式设计的。
如果到 main 函数,异常仍就没有被匹配就会终止程序,不是发生严重错误的情况下,我们是不期望程序终止的,所以一般 main 函数中最后都会使用 catch(…),它可以捕获任意类型的异常,但是是不知道异常错误是什么。

1.5 异常重新抛出

有时 catch 到一个异常对象后,需要对错误进行分类,其中的某种异常需要进行特殊的处理,其他错误则重新抛出给外层的调用链处理。捕获后需要重新抛出,直接 throw;就可以把捕获的对象直接抛出。

二、标准库的异常

https://legacy.cplusplus.com/reference/exception/exception/
C++ 标准库也定义了一套自己的异常继承体系库,基类是 exception,所以我们日常写程序,需要在主函数捕获 exception 即可,要获取异常信息,调用 what 函数,what 是一个虚函数,派生类可以重写。

http://www.jsqmd.com/news/1080752/

相关文章:

  • VMware卡顿≠配置不足:20年实战总结的“伪高负载”陷阱清单(含Windows时间同步抖动、Linux ksoftirqd异常、VMware Tools版本错配等6大隐形杀手)
  • 【VMware黑屏急救手册】:20年运维专家亲授5大开机黑屏根因与3分钟应急修复法
  • 如何用OBS背景移除插件轻松实现专业级虚拟背景效果:5分钟快速指南
  • 深度解析Apache Spark:从批处理到流计算的架构演进与实战内幕
  • 从CAD到机器人仿真:creo2urdf的技术架构与工程实践
  • 企业纳税信用等级全解析:从A到D的信用阶梯与实战价值
  • Dify低代码AI平台实战:构建可状态管理的旅行规划Agent
  • 闲鱼反爬虫机制深度解析与合规应对策略
  • 从LQR到学习增强控制:经典最优控制与现代机器学习的融合实践
  • API密钥泄露应急响应:从撤销到自动化轮换的安全实战指南
  • 免费网页版PPT制作工具PPTist:3分钟快速上手的终极指南
  • 【紧急避坑】VMware 17.x升级后必现黑屏?独家适配补丁+兼容性矩阵表(限时公开)
  • 如何在无网络环境下使用LibreTranslate:离线翻译终极指南
  • VMware ESXi安装卡在UEFI界面?BIOS配置错误导致的7类硬核故障(含主板级诊断流程)
  • 【限时技术解密】VMware卡顿的第8层真相:硬件固件缺陷触发VMX进程陷入不可中断睡眠(附Dell HPE厂商补丁对照表)
  • 查询重构与扩展:子问题分解、假设性文档嵌入与多轮对话改写
  • 2026学生党英语提效:一句一句读懂,比硬背更顺手
  • VMware Workstation黑屏率骤升210%?2024年Q2真实故障TOP5榜单首次公开(含厂商回避的BIOS兼容性清单)
  • Dism++系统维护终极指南:从磁盘清理到系统部署的完整解决方案
  • 通过玩句子游戏学英语
  • 江西省口碑好的办理离婚案件律所
  • 暴雨装备:今年国内AI服务器规模大幅增长
  • 智能改进员中的问题识别与优化实施
  • 【课程设计/毕业设计】基于SpringBoot + 小程序的轻量化旅行记录分享小程序系统的设计与实现 智慧文旅视角下旅游游迹共享服务平台设计与实现【附源码、数据库、万字文档】
  • 高效智能图像去重工具:ImageDedup解决重复图片检测难题
  • 【紧急预警】VMware升级后BIOS兼容性断链!3大主流服务器厂商(HPE/Dell/IBM)固件版本适配清单(限时更新至2024Q3)
  • 返乡创业在顺平:科技小微企业成长折射县域经济转型新活力[转载]
  • 如何用bili2text将B站视频转为文字:3步快速提取视频内容的完整指南
  • 企业微信回调InvalidKeyException排查:EncodingAESKey配置与解密原理详解
  • 2026免费去水印软件哪个好用?电脑手机无广告工具优缺点对比