Namespaces
Variants

std:: unexpected

From cppreference.net
定义于头文件 <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++标准。

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

参阅

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