命名空间
变体
操作

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 处理程序,并且展开后来导致调用了 unexpected,那么将在 throw 表达式结束时安装的处理程序是将被调用的处理程序(注意:重新抛出是否应用了新的处理程序是模棱两可的)。

(直到 C++11)

如果析构函数在堆栈展开期间重置了 unexpected 处理程序,那么如果展开后来导致调用了 unexpected,则调用哪个处理程序是未定义的。

(自 C++11 起)

[编辑] 异常

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

[编辑] 缺陷报告

以下行为更改的缺陷报告已追溯应用于以前发布的 C++ 标准。

DR 应用于 已发布的行为 正确行为
LWG 2111 C++11 在堆栈期间调用 std::set_unexpected 的效果
展开与 C++98 不同,并且破坏了一些 ABI
未指定

[编辑] 另请参见

表示为意外值
(类模板) [编辑]
(在 C++11 中弃用)(在 C++17 中移除)
std::unexpected 调用的函数的类型
(typedef) [编辑]