std::unexpected

来自cppreference.com
< cpp‎ | error
在标头 <exception> 定义
void unexpected();
(C++11 前)
[[noreturn]] void unexpected();
(C++11 中弃用)
(C++17 中移除)

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

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

两种情况下 std::unexpected 都会调用当前安装的 std::unexpected_handler。默认的 std::unexpected_handler 会调用 std::terminate

如果析构函数在栈回溯期间重置了非预期处理函数,且之后的回溯导致调用 unexpected,那么会调用在 throw 表达式结尾安装的处理函数。(注意:重抛出是否应用新的处理函数是有歧义的)

(C++11 前)

如果析构函数在栈回溯期间重置了非预期处理函数,那么之后的回溯导致调用 unexpected 时调用哪个处理函数是未指定的。

(C++11 起)

异常

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

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 2111 C++11 在栈回溯期间调用 std::set_unexpected 的效果与 C++98 不同,并破坏一些 ABI 令它未指定

参阅

表示一个非预期值
(类模板)
(C++11 中弃用)(C++17 中移除)
std::unexpected 所调用的函数类型
(typedef)