std::unexpected
来自 cppreference.com
定义在头文件 <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 处理程序,并且展开后来导致调用了 |
(直到 C++11) |
如果析构函数在堆栈展开期间重置了 unexpected 处理程序,那么如果展开后来导致调用了 |
(自 C++11 起) |
[编辑] 异常
抛出当前安装的 std::unexpected_handler 抛出的任何异常。
[编辑] 缺陷报告
以下行为更改的缺陷报告已追溯应用于以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 2111 | C++11 | 在堆栈期间调用 std::set_unexpected 的效果 展开与 C++98 不同,并且破坏了一些 ABI |
未指定 |
[编辑] 另请参见
(C++23) |
表示为意外值 (类模板) |
(在 C++11 中弃用)(在 C++17 中移除) |
由 std::unexpected 调用的函数的类型 (typedef) |