std::unexpected
来自 cppreference.cn
定义于头文件 <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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 2111 | C++11 | 在栈展开期间调用 std::set_unexpected 的效果 与 C++98 不同,并破坏了一些 ABI |
变为未指定 |
[编辑] 参阅
(C++23) |
表示为意外值 (类模板) |
(C++11 中已废弃)(C++17 中已移除) |
被 std::unexpected 调用的函数类型 (typedef) |