命名空间
变体
操作

std::unexpected_handler

来自 cppreference.cn
< cpp‎ | 错误
定义于头文件 <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:抛出的异常对象被销毁,并且 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
(函数) [编辑]