Namespaces
Variants

std:: unexpected_handler

From cppreference.net
定义于头文件 <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
(函数)