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 处理函数,并且后续的栈展开导致调用 |
(直到 C++11) |
|
如果析构函数在栈展开期间重置了 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
调用的函数类型
(类型别名) |