# std::bad_exception

< cpp‎ | error

定义于头文件 `<exception>` |  |
class bad_exception; |  |

`std::bad_exception` 是 C++ 运行时在下列情况抛出的异常类型：

若 std::exception_ptr 存储被捕捉异常的副本，且被 std::current_exception 捕捉的异常对象的复制构造函数抛出异常，则被捕捉的异常是 `std::bad_exception` 的一个实例。 | (C++11 起)
若动态异常规定被违背且 std::unexpected 抛出或重抛仍然违背异常规定的异常，但异常规定允许 `std::bad_exception` ，则抛出 `std::bad_exception` 。 | (C++17 前)

继承图

### 成员函数

(构造函数) | 构造 `bad_exception` 对象 (公开成员函数)
operator= | 复制该对象 (公开成员函数)
what [虚] | 返回解释性字符串 (虚公开成员函数)

## 继承自 std::exception

### 成员函数

(析构函数) [虚] | 析构该异常对象 (`std::exception` 的虚公开成员函数)
what [虚] | 返回解释性字符串 (`std::exception` 的虚公开成员函数)

### 示例

    #include <iostream>
    #include <exception>
    #include <stdexcept>

    void my_unexp() { throw; }

    void test() throw(std::bad_exception)
    {
        throw std::runtime_error("test");
    }

    int main()
    {
        std::set_unexpected(my_unexp);
        try {
             test();
        } catch(const std::bad_exception& e)
        {
            std::cerr << "Caught " << e.what() << '\n';
        }
    }

可能的输出：

    Caught std::bad_exception