C++ std::exception派生类

本文全面介绍了C++中std::exception及其派生类,包括logic_error、runtime_error等常见异常类型,深入探讨了异常处理机制及如何自定义异常类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 std::exception派生类
  • logic_error
    • invalid_argument
    • domain_error
    • length_error
    • out_of_range
    • future_error(C++11)
    • bad_optional_access(C++17)
  • runtime_error
    • range_error
    • overflow_error
    • underflow_error
    • regex_error(C++11)
    • nonexistent_local_time(C++20)
    • ambiguous_local_time(C++20)
    • tx_exception(TM TS)
    • system_error(C++11)
      • ios_base::failure(C++11)
      • filesystem::filesystem_error(C++17)
  • bad_typeid
  • bad_cast
    • bad_any_cast(C++17)
  • bad_weak_ptr(C++11)
  • bad_function_call(C++11)
  • bad_alloc
    • bad_array_new_length(C++11)
  • bad_exception
  • ios_base::failure(C++11 前)
  • bad_variant_access(C++17)
2 注意
  • std::exception的构造函数没有参数,而一些派生类的构造函数有参数。
  • 可以使用派生类,或者自定义std::exception的子类,重写what()方法。
3 参考

cppreference

<think>好的,用户让我介绍一下C++中的exception类的特性。首先,我需要回忆一下C++异常处理的基本结构。exception类是标准库中所有异常类的基类,定义在<exception>头文件中。它的主要作用是为异常提供统一的接口,比如what()方法。 接下来,我应该详细说明exception类的成员函数,特别是构造函数、析构函数、what()方法。用户可能需要了解如何自定义异常,所以需要提到如何继承exception类并重写what()函数。比如,可以举一个自定义异常的例子,展示如何覆盖what()来返回错误信息。 然后,要考虑标准库中的派生异常,比如logic_error和runtime_error,这些是常见的预定义异常类,用户可能需要知道它们的存在和用法。同时,需要解释为什么使用exception作为基类,比如多态处理的好处。 另外,需要提到异常的安全性,比如noexcept关键字和异常规范,但可能用户的问题更关注exception类本身,这部分可以简要带过。最后,确保给出一个代码示例,展示如何定义自定义异常和使用try-catch块捕获异常。 在相关问题部分,应该围绕异常处理的基础知识展开,比如异常处理机制、自定义异常、标准异常类之间的区别,以及noexcept的作用。这样可以帮助用户进一步巩固相关知识。</think><< C++中的exception类是所有标准异常类的基类,定义在<exception>头文件中。其核心特性如下: 1. 继承体系: - 基类:std::exception - 派生类std::runtime_error、std::logic_error等标准异常 - 用户可继承创建自定义异常 2. 成员函数: ```cpp class exception { public: exception() noexcept; // 默认构造函数 exception(const exception&) noexcept; // 拷贝构造函数 virtual ~exception() noexcept; // 虚析构函数 virtual const char* what() const noexcept; // 获取异常描述 }; ``` 3. 关键特性: - 虚函数what():返回描述异常的C风格字符串 - noexcept保证:所有成员函数都声明为noexcept - 多态支持:通过基类指针/引用捕获所有派生异常 - 标准兼容:所有标准库异常都继承自exception 自定义异常示例: ```cpp #include <exception> #include <string> class MyException : public std::exception { std::string msg; public: MyException(const std::string& message) : msg(message) {} const char* what() const noexcept override { return msg.c_str(); } }; // 使用示例 try { throw MyException("Custom error occurred"); } catch (const std::exception& e) { std::cout << "Caught exception: " << e.what(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值