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类派生的

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/sugarWill666/p/9216093.html
Copyright © 2011-2022 走看看