std::unexpected_handler

< cpp‎ | error
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等字符串转换
(C++17)
(C++17)
 
 
定义于头文件 <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++17 中移除)
违背动态异常说明时调用的函数
(函数)
(C++17 中移除)
更改要被 std::unexpected 调用的函数
(函数)
(C++11)(C++17 中移除)
获得当前的 unexpected_handler
(函数)