C++的异常

c语言的传统处理错误方式

c语言中传统的处理错误方式有两种:

1.终止程序(assert):通常用于程序员手动终止

2.返回错误码:对错误进行编号

面向过程的接口:

c++中处理错误的方式

当程序出现问题时会抛出异常,异常必须被匹配的try,catch捕获,否则会报错

异常只能在try,catch中被捕捉,异常会选择类型匹配且最近的try,catch

异常有抛出对象引发,该对象的类型决定了激活哪个catch的处理代码

只有类型匹配的catch才能捕捉throw抛出的异常

eg.

如果发生异常会先检查throw本身是否在try内部,如果在内部再查找匹配的catch语句,如果有匹配的catch,则处理

否则就推出当前函数栈,继续再调用该函数的栈中进行查找,直到找到匹配的try,catch为止

如果到达main函数的栈,依旧没有匹配的,则终止程序

catch(...)可以捕捉未知类型的异常,如果一个异常没有匹配的类型,则会和catch(...)匹配

在异常与catch的匹配中不存在隐式类型转换,类型必须严格匹配

但是存在一个例外,就是可以允许抛出派生类对象,使用基类捕获

抛出的异常通常会记录在日志内

throw抛出的对象会在匹配的catch处销毁

异常安全与规范

在构造函数和析构函数中最好不要抛异常,否则可能会导致对象初始化不完整或内存泄露

是否会抛出异常最好要标记清楚

确定不会抛异常,需要加上noexcept

C++异常的优缺点

异常最大的有点是可以清晰的标识错误

方便查找定位错误

相关推荐
清水白石0083 分钟前
从打印对象到高质量调试:彻底理解 Python 中 `__repr__` 和 `__str__` 的区别
开发语言·python
枕星而眠8 分钟前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
_李小白27 分钟前
【android opencv学习笔记】Day 31:提取轮廓之Canny算法
android·opencv·学习
智者知已应修善业33 分钟前
【51单片机8个LED,已经使用了D1D2,怎么样在不动D1D2的前提下实现D6~D8的流水灯】2024-1-19
c++·经验分享·笔记·算法·51单片机
Evand J34 分钟前
【MATLAB例程】自适应渐消扩展卡尔曼滤波(AFEKF)三维雷达目标跟踪|效果已调优,附下载链接和运行结果,代码直接运行即可
开发语言·算法·matlab·目标跟踪·卡尔曼滤波·自适应滤波·代码定制
零陵上将军_xdr35 分钟前
后端转全栈学习-Day6-JavaScript 基础-4
前端·javascript·学习
坚果派·白晓明35 分钟前
鸿蒙PC适配实战:simdjson 三方库移植攻略与 AtomCode Skills 提效之道
c++·harmonyos·三方库·skills·atomcode·c/c++三方库·c/c++三方库适配
爱装代码的小瓶子35 分钟前
3. 设计buffer模块
linux·服务器·开发语言·c++·php
郝学胜-神的一滴36 分钟前
Qt 高级开发 027: QTabWidget自定义样式表美化实战
开发语言·c++·qt·程序人生·软件构建·用户界面
keykey6.36 分钟前
迁移学习实战:用预训练模型做图像分类
开发语言·人工智能·深度学习·机器学习