行业知识
【C++高阶(七)】C++异常处理的方式
2026-11-08 01:08:52
来源:互联网转载
博主CSDN主页:杭电码农-NEO
⏩专栏分类:C++从入门到精通⏪
代码仓库:NEO的学习日记
关注我带你学习C++
异常处理的方式
- 1. 前言
- 2. C语言处理异常的方式
- 3. C++异常概念
- 4. 异常的抛出和匹配原则
- 5. 异常的重新抛出
- 6. RAII思想在异常体系中的使用
- 7. 自定义异常体系
- 8. C++标准库的异常体系
- 9. 总结以及拓展
1. 前言
C++有一套独立的异常处理机制,
相信大家一定听说过try,catch这两
个词,今天就来做详细的介绍
本章重点:
本篇文章着重讲解C++异常处理的方式,
三个关键字,tyr,catch,throw,并且介绍异
常的用法和自定义体系的异常以及智能指
针在异常处理中的使用场景.其中,会复习
C语言异常处理的方式
2. C语言处理异常的方式
最经典的处理方式:使用assert
assert的缺陷:
如果在代码中使用assert,则只在debug
模式下有效,在release模式下会失效.并且
只要有错误就会直接终止程序,这明显不符
合实际,比如说在使用微信时,由于网络问题
信息没发出去,这时直接将微信程序终止了,
这样做会被乱棍打***!
C语言还能用错误码返回异常信息
错误码errno的缺陷:
返回的错误码是一个数字,程序员还需
去查表来得知这个错误码是什么意思,
并且就算查找了错误码的信息,可能它
说的不清楚,也不好看错误信息
综上所述,C语言处理异常的方式还是
不够完美,于是祖师爷写了一套自己的
3. C++异常概念
当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。
- throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的
- catch: 在您想要处理问题的地方,通过异常处理程序捕获异常.catch 关键字用于捕获异常
- try: try 块中的代码标识将被激活的特定异常,它后面通常跟着一个或多个 catch 块。
使用方法:
try{int a,b;cin>>a>>b;if(b == 0)throw "除0错误"cout//......}int a,b;cinab;if(b == 0)throw "除0错误"cout//......}catch(string str){//......}throw "测试中";}void b(){a()}void c(){b()}int main(){try{c();}catch(string str){} // 当b == 0时抛出异常if (b == 0) throw "除0错误!"; else return ((double)a / (double)b);}void Func(){int len, time;cin len time;cout //这个catch与throw相距最近,会优先到这儿cout try {Func();}catch (const char* errmsg) {cout // 当b == 0时抛出异常if (b == 0) throw "除0错误!"; else return ((double)a / (double)b);}void Func(){int len, time;cin len time;cout //这个catch与throw相距最近,会优先到这儿cout try {Func();}catch (const char* errmsg) {cout cout// 当b == 0时抛出异常if (b == 0){throw "Division by zero condition!";}return (double)a / (double)b;}void Func(){// 这里可以看到如果发生除0错误抛出异常,另外下面的array没有得到释放。// 所以这里捕获异常后并不处理异常,异常还是交给外面处理,这里捕获了再// 重新抛出去。int* array = new int[10];try {int len, time;cin len time;cout cout try{Func();}catch (const char* errmsg){cout // 当b == 0时抛出异常if (b == 0){throw "Division by zero condition!";}return (double)a / (double)b;}void Func(){shared_ptrint len, time;cin len time;cout try{Func();}catch (const char* errmsg){cout
上一篇:怎么开通领工资服务器?
下一篇:怎么选择京城之行服务器?