std::unexpected

来自cppreference.com
< cpp‎ | error
 
 
工具库
通用工具
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)

初等字符串转换
(C++17)
(C++17)
栈踪
 
 
定义于头文件 <exception>
void unexpected();
(C++11 前)
[[noreturn]] void unexpected();
(C++11 起)
(弃用)
(C++17 中移除)

std::unexpected() 为 C++ 运行时在违背动态异常规定时调用:从其异常规定禁止此类型异常的函数抛出该类型异常。

亦可从程序直接调用 std::unexpected()

任一情况下, std::unexpected 调用当前安装的 std::unexpected_handler 。默认的 std::unexpected_handler 调用 std::terminate

若析构函数在栈回溯期间重置 unexpected_handler 且之后的回溯导致调用 unexpected ,则将调用于 throw 表达式结尾安装的处理函数。(注意:重抛出是否应用新的处理函数是有歧义的)

(C++11 前)

若析构函数在栈回溯期间重置 unexpected_handler ,则若之后的回溯导致调用 unexpected ,则调用哪个处理函数是未指定的。

(C++11 起)


参数

(无)

返回值

(无)

异常

抛出当前安装的 std::unexpected_handler 所抛的异常

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
LWG 2111 C++11 在栈回溯期间调用 set_unexpected 的效果异于 C++98 并破坏一些 ABI 令它未指定

参阅

(C++17 中移除)
std::unexpected 所调用的函数类型
(typedef)