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++异常的优缺点

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

方便查找定位错误

相关推荐
Chester_19996 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲7 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan7 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子8 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化8 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251498 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
是隼人8 小时前
buuctf-pwn xdctf2015_pwn200题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
大衛說9 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习