zoukankan      html  css  js  c++  java
  • C++:异常处理

    C++ 处理异常的 手段通常有一下几种

    1、通过  throw  抛出异常  , 抛出的异常 将会向上寻找最近匹配 的  catch()  语句块  来处理异常  ,如果  未找到匹配的 catch  , 异常将会自动调用

      terminate  来终止程序的执行。  在C++中,所有未处理的异常都会 导致调用 terminate 来使程序终止

      throw 可以抛出  C++  标准库 定义的 标准异常  , 也可以抛出自定义的异常

      

    2、通过  try{} catch(){}  语句块来处理异常

      try{}  中通常存放的是 可能会发生异常的代码  ,  catch(异常类型){}   存放的事针对 某种异常  进行处理的代码

      catch 语句的括号中存放的是  异常类型定义语句 

      例如

     1     try{
     2         if(1){
     3             throw    1;
     4         }
     5     }catch(const char* err){
     6         cout<<err<<endl;
     7         
     8     }catch(int    err){
     9         cout<<err<<endl;
    10     }

      上述代码中 try 语句块中  throw 出了 一个  异常值 为 1  的异常 , 1 在C++编译器中的默认为 整形 。当抛出异常后 , 异常会顺着异常调用链向上查找匹配的

    异常 处理 catch , 首先  catch(const char* err) {} 被找到 , 但是异常类型不匹配  , 则 pass  , 继续向下找 , 找到了  catch(int  err) ,这段 异常处理程

    序要处理的异常类型为整形, 这就意味着 找到了匹配的catch ,  程序就会跳到  该catch 中执行处理程序 , 上述代码中的处理过程只是简单的把异常的值打印出来。

    注意: 就像上述示例代码 , 如果 抛出异常后 在代码当前所在的函数中找不到匹配的 的 catch  , 就会顺着异常 异常调用链 到 caller function 中去找匹配的

    catch  , 就这样一直向上 直到找到匹配的catch 或者   遇到  catch(...)   或者   异常调用链匹配结束为止 。

    catch(...)   这样的语句的作用是捕获所有类型的异常 , 通常用于 默认的 异常处理。

    另外  ,  关于  finally , 在 windows 平台上 C++ 代码中 可能会见到 诸如  try{}catch(xxx){}finally{}  这样的代码  ,  要注意  finally  不是 C++ 关键字 ,

    而只是 MS编译器对C++的扩展 , finally 的作用 和 catch(...) 的作用相同 , 都是 用于对 异常的默认处理

     标准异常:

      C++中定义了一组类 , 用户报告在标准库中的函数 执行的时候 遇到的问题。

    这些异常类定义在一下四个头文件中

    (1)、<exception>  该头文件中定义了最常见的异常类 exception 这个类智能告知有异常产生, 但是不能提供更多的信息 , catch(exception e) 等同于 catch(...) (可能)

    (2)、<stdexcept> 改天头文件中定义了 几种常见的异常类 

    exception    最常见的异常类

    runtime_error   运行时错误:仅在运行时才能检测到的错误

    range_error    运行时错误,生成的结果超出了有意义的值域的范围

    overflow_error  运行时错误:计算上溢

    underflow_error  运行时错误:计算下溢

    logic_error     逻辑错误:可在运行前检测到的错误

    domain_erroe    逻辑错误:参数的结果值不存在

    invalid_argument 逻辑错误:不合适的参数

    length_error  逻辑错误,试图生成一个超出该类最大长度的对象

    out_of_range  逻辑错误:使用一个超出有效范围的值

    (3)、<new> 头文件定义了 bad_alloc 异常类型 , 提供了因无法分配内存而由new抛出的异常

    (4)、<type_info> 头文件 定义了 bad_cast 异常类型 ,

    exception   bad_cast   bad_alloc   异常类 只提供了 默认构造函数 , 所以无法再定义对象的时候给他们赋初值

    其他异常类 之定义了 用string 对象来 初始化的 构造函数 , 就是说只能用一个 string 对象来初始化,该string对象用于为发生的异常提供更多的信息

    异常类型 还定义了一个  what  成员函数 , 该函数 返回 const char* 类型的值 , 提示异常信息。

  • 相关阅读:
    pipeline流水线语法格式
    nexus私服配置npm、nuget、pypi
    正则表达式-grep
    awk 经典案例
    nginx安装,配置,及高可用
    git remote add origin错误
    [转]Git 撤销操作
    [转]git命令之git remote的用法
    [转]git学习------>git-rev-parse命令初识
    转 gerrit
  • 原文地址:https://www.cnblogs.com/wowk/p/3127291.html
Copyright © 2011-2022 走看看