• C++异常


    C++标准异常库

    在这里插入图片描述

    异常描述
    std::exception该异常是所有标准 C++ 异常的父类。
    std::bad_alloc该异常可以通过 new 抛出。
    std::bad_cast该异常可以通过 dynamic_cast 抛出。
    std::bad_exception这在处理 C++ 程序中无法预期的异常时非常有用。
    std::bad_typeid该异常可以通过 typeid 抛出。
    std::logic_error理论上可以通过读取代码来检测到的异常。
    std::domain_error当使用了一个无效的数学域时,会抛出该异常。
    std::invalid_argument当使用了无效的参数时,会抛出该异常。
    std::length_error当创建了太长的 std::string 时,会抛出该异常。
    std::out_of_range该异常可以通过方法抛出,例如 std::vector 和 std::bitset<>::operator
    std::runtime_error理论上不可以通过读取代码来检测到的异常。
    std::overflow_error当发生数学上溢时,会抛出该异常。
    std::range_error当尝试存储超出范围的值时,会抛出该异常。
    std::underflow_error当发生数学下溢时,会抛出该异常。

    定义自己的异常

    ① 建议自己的异常类要继承标准异常类。因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。
    ② 当继承标准异常类时,应该重载父类的what函数和虚析构函数。
    ③ 因为栈展开的过程中,要复制异常类型,那么要根据你在类中添加的成员考虑是否提供自己的复制构造函数。

    #include 
    #include 
    using namespace std;
     
    struct MyException : public exception
    {
      const char * what () const throw ()
      {
        return "C++ Exception";
      }
    };
     
    int main()
    {
      try
      {
        throw MyException();
      }
      catch(MyException& e)
      {
        std::cout << "MyException caught" << std::endl;
        std::cout << e.what() << std::endl;
      }
      catch(std::exception& e)
      {
        //其他的错误
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    Redisson实现延迟队列
    HOW TO EASILY CREATE BARPLOTS WITH ERROR BARS IN R
    22.10.30补卡 22CCPC桂林站M题
    C语言自定义类型详解 —— 结构体、枚举、联合体
    spring import用法
    嵌入式图像处理机器视觉库YMCV使用
    FileZilla的安装流程
    RPC协议详解
    Postgresql源码(58)元组拼接heap_form_tuple剖析
    结构体指针的引入
  • 原文地址:https://blog.csdn.net/simple_core/article/details/126381030