std:: unexpected_handler
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定义于头文件
<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
(函数) |