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

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

方便查找定位错误

相关推荐
cpp_250112 分钟前
P1024 [NOIP 2001 提高组] 一元三次方程求解
数据结构·c++·算法·题解·二分答案·洛谷·csp
小羽网安15 分钟前
从零开始学习 sql 注入,常见的 sql 注入解析
数据库·sql·学习
Gofarlic_oms16 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上7 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble7 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin7 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy7 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
stm32 菜鸟7 小时前
nucleo-f411re学习记录-12,Wifi模块ESP8684
学习
AI人工智能+电脑小能手8 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
郑州光合科技余经理8 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php