小工具知识网

当前位置: 首页 > 行业知识 > 【C++高阶(七)】C++异常处理的方式

行业知识

【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 

上一篇:怎么开通领工资服务器?

下一篇:怎么选择京城之行服务器?