zoukankan      html  css  js  c++  java
  • c++中的异常处理

    异常的概念

    程序在运行过程中可能产生异常

    异常(Exception)与Bug的区别

      异常是程序运行时可预料的执行分支

      Bug是程序中的错误,是不被预期的运行方式

    异常(Exception)和Bug的对比

    异常

      运行时产生除0的情况

      需要打开的外部文件不存在

      数组访问时越界

    Bug

      使用野指针

      堆数组使用后未释放

      选择排序无法处理长度为0的数组

    c++内置了异常处理的语法元素try...catch...

    try语句处理正常代码逻辑

    catch语句处理异常情况

    try语句中的异常由对应的catch语句处理

    c++通过throw语句抛出异常信息

    c++异常处理分析

    throw抛出的异常必须被catch处理

      当前函数能够处理异常,程序继续往下执行

      当前函数无法处理异常,则函数停止执行,并返回

    未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。

    同一个try语句可以跟上多个catch语句

      catch语句可以定义具体处理的异常类型

      不同类型的异常由不同的catch语句负责处理

      try语句中可以抛出任何类型的异常

      catch(...)用于处理所有类型的异常

      任何异常都只能被捕获(catch)一次

    异常处理的匹配规则

    异常抛出后,至上而下严格匹配每一个catch语句处理的类型

    异常处理匹配时,不进行任何的类型转换

    catch语句块中可以抛出异常

    catch中抛出的异常需要外层的try...catch...捕获

    异常的类型可以是自定义类类型

    对于类类型异常的匹配依旧是至上而下严格匹配

    赋值兼容性原则在异常匹配中依然适用

    一般而言

      匹配子类异常的catch放在上部

      匹配父类异常的catch放在下部

    在工程中会定义一系列的异常类

    每个类代表工程中可能出现的一种异常类型

    代码复用时可能需要重解释不同的异常类

    在定义catch语句块时推荐使用引用作为参数

    c++标准库中提供了实用异常类族

    标准库中的异常都是从exception类派生的

    exception类有两个主要的分支

    logic_error

      常用于程序中的可避免逻辑错误

    runtime_error

      常用于程序中无法避免的恶性错误

    小结

    catch语句块中可以抛出异常

    异常的类型可以是自定义类类型

    赋值兼容性原则在异常匹配中依然适用

    标准库中的异常都是从exception类派生的

  • 相关阅读:
    Oracle EBS 配置文件取值
    “嗯...无法访问此页面 尝试此操作.....”的解决方法
    为什么在开发的微信小程序项目里写不上汉字?
    VM1238:2 pages/logs/logs.json 文件解析错误 SyntaxError: Unexpected token / in JSON at position 41....
    allparis工具的使用
    can't open 1.txt at releaseallpairs.pl line 368.
    element.style的样式问题解决方法
    常见的http状态码有哪些,代表什么意思?
    怎样快速修改文件名的后缀
    “该文件没有与之关联的应用来执行操作请安装应用若已安装应用程序请在默认应用设置...”
  • 原文地址:https://www.cnblogs.com/sugarWill666/p/9216093.html
Copyright © 2011-2022 走看看