命名空间
变体
操作

std::unexpected

来自 cppreference.cn
< 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 handler,并且展开稍后导致调用 unexpected,则将调用在 throw 表达式末尾安装的处理程序(注意:重新抛出是否应用了新的处理程序尚不明确)。

(直到 C++11)

如果析构函数在栈展开期间重置了 unexpected handler,则如果展开稍后导致调用 unexpected,则未指定调用哪个处理程序。

(自 C++11 起)

[编辑] 异常

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

[编辑] 缺陷报告

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

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

[编辑] 参见

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