std::unexpected_handler
来自 cppreference.cn
定义于头文件 <exception> |
||
typedef void ( *unexpected_handler )(); |
(在 C++11 中已弃用) (在 C++17 中已移除) |
|
std::unexpected_handler
是函数指针类型(指向一个不带参数且返回 void 的函数),通过函数 std::set_unexpected 和 std::get_unexpected 进行安装和查询,并由 std::unexpected 调用。
C++ 实现提供了一个默认的 std::unexpected_handler
函数,该函数会调用 std::terminate()。如果安装了空指针值(通过 std::set_unexpected),则实现可能会恢复默认处理程序。
用户定义的 std::unexpected_handler
预计会终止程序或抛出异常。如果它抛出异常,可能会遇到以下三种情况之一:
1) 由 std::unexpected_handler
抛出的异常满足之前被违反的动态异常规范。新的异常被允许逃逸函数,并且栈展开继续。
2) 由 std::unexpected_handler
抛出的异常仍然违反异常规范
2a) 然而,异常规范允许 std::bad_exception:抛出的异常对象被销毁,并且 C++ 运行时构造并抛出 std::bad_exception 代替。
2b) 异常规范不允许 std::bad_exception:调用 std::terminate()。
[编辑] 参见
(C++11 中已废弃)(C++17 中已移除) |
动态异常规范被违反时调用的函数 (函数) |
(C++11 中已废弃)(C++17 中已移除) |
更改 std::unexpected 将调用的函数 (函数) |
(C++11 中已废弃)(C++17 中已移除) |
获取当前的 unexpected_handler (函数) |