命名空间
变体
动作

std::unexpected_handler

来自 cppreference.com
< cpp‎ | error
定义在头文件 <exception>
typedef void ( *unexpected_handler )();
(在 C++11 中弃用)
(在 C++17 中移除)

std::unexpected_handler 是函数指针类型(指向函数的指针,该函数不接受任何参数并返回 void),它由函数 std::set_unexpectedstd::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:抛出的异常对象被销毁,并且 std::bad_exception 由 C++ 运行时构造并被抛出。

2b) 异常规范不允许 std::bad_exceptionstd::terminate() 被调用。

[编辑] 参见

(在 C++11 中弃用)(在 C++17 中移除)
当动态异常规范被违反时调用的函数
(函数) [编辑]
(在 C++11 中弃用)(在 C++17 中移除)
更改由 std::unexpected 调用的函数
(函数) [编辑]
(在 C++11 中弃用)(在 C++17 中移除)
获取当前的 unexpected_handler
(函数) [编辑]