Namespaces
Variants

std::unexpected

来自 zh.cppreference.net
定义于头文件 <exception>
void unexpected();
(直到 C++11)
[[noreturn]] void unexpected();
(自 C++11)
(直到 C++17)
(在 C++11 中弃用)

std::unexpected() 当动态异常规范被违反时,由 C++ 运行时调用:从函数中抛出的异常,其异常规范禁止该类型的异常。

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++标准。

缺陷报告 适用范围 发布时的行为 正确行为
LWG 2111 C++11 在栈展开期间调用 std::set_unexpected 的效果
与 C++98 不同且破坏某些 ABI
改为未指定

参阅

(C++23)
表示意外值的包装器
(类模板)
(C++11 中弃用) (C++17 中移除)
被 std::unexpected 调用的函数类型
(类型别名)