【C++高阶(七)】C++异常处理的方式
💓博主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_ptr int len, time; cin len time; cout try { Func(); } catch (const char* errmsg) { cout
The End