cpp/error/unexpected handler:修订间差异
来自cppreference.com
小无编辑摘要 |
小无编辑摘要 |
||
| 第1行: | 第1行: | ||
{{cpp/title|unexpected_handler}} | {{cpp/title|unexpected_handler}} | ||
{{cpp/error/navbar}} | {{cpp/error/navbar}} | ||
{{ | {{headerexception|deprecated=c++11|until=c++17| | ||
typedef void (*unexpected_handler)(); | typedef void (*unexpected_handler)(); | ||
}} | }} | ||
{{tt|std::unexpected_handler}} 是函数指针类型(指向不接收实参并返回 void 的函数),它由函数 {{lc|std::set_unexpected}} 所安装,由 {{lc|std::get_unexpected}} 所查询,并由 {{lc|std::unexpected}} 所调用。 | {{tt|std::unexpected_handler}} 是函数指针类型(指向不接收实参并返回 void 的函数),它由函数 {{lc|std::set_unexpected}} 所安装,由 {{lc|std::get_unexpected}} 所查询,并由 {{lc|std::unexpected}} 所调用。 | ||
C++ 实现提供默认的 {{tt|std::unexpected_handler}} 函数,它调用 {{ | C++ 实现提供默认的 {{tt|std::unexpected_handler}} 函数,它调用 {{|std::terminate()}}。若安装空指针值(用 {{lc|std::set_unexpected}}),则实现可以替代地恢复默认处理函数。 | ||
期待用户定义的 {{tt|std::unexpected_handler}} 终止程序或抛出异常。若它抛出异常,则可能遇到下列三种情况之一: | 期待用户定义的 {{tt|std::unexpected_handler}} 终止程序或抛出异常。若它抛出异常,则可能遇到下列三种情况之一: | ||
| 第20行: | 第17行: | ||
2a) 然而,异常规定允许 {{lc|std::bad_exception}}:C++ 运行时销毁抛出的异常对象,并构造 {{lc|std::bad_exception}} 替代地抛出。 | 2a) 然而,异常规定允许 {{lc|std::bad_exception}}:C++ 运行时销毁抛出的异常对象,并构造 {{lc|std::bad_exception}} 替代地抛出。 | ||
2b) 异常规定不允许 {{lc|std::bad_exception}}:调用 {{ | 2b) 异常规定不允许 {{lc|std::bad_exception}}:调用 {{|std::terminate()}}。 | ||
===参阅=== | ===参阅=== | ||
{{dsc begin}} | {{dsc begin}} | ||
{{dsc inc | cpp/error/dsc unexpected}} | {{dsc inc|cpp/error/dsc unexpected}} | ||
{{dsc inc | cpp/error/dsc set_unexpected}} | {{dsc inc|cpp/error/dsc set_unexpected}} | ||
{{dsc inc | cpp/error/dsc get_unexpected}} | {{dsc inc|cpp/error/dsc get_unexpected}} | ||
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|en|es|fr|it|ja|pt|ru}} | {{langlinks|de|en|es|fr|it|ja|pt|ru}} | ||
2024年7月10日 (三) 04:46的最新版本
| 在标头 <exception> 定义
|
||
| |
(C++11 弃用) (C++17 移除) |
|
std::unexpected_handler 是函数指针类型(指向不接收实参并返回 void 的函数),它由函数 std::set_unexpected 所安装,由 std::get_unexpected 所查询,并由 std::unexpected 所调用。
C++ 实现提供默认的 std::unexpected_handler 函数,它调用 std::terminate()。若安装空指针值(用 std::set_unexpected),则实现可以替代地恢复默认处理函数。
期待用户定义的 std::unexpected_handler 终止程序或抛出异常。若它抛出异常,则可能遇到下列三种情况之一:
1) std::unexpected_handler 所抛的异常满足之前被违背的动态异常规定。则允许新异常逃出函数并继续栈回溯。
2) std::unexpected_handler 所抛的异常仍然违背动态异常规定:
2a) 然而,异常规定允许 std::bad_exception:C++ 运行时销毁抛出的异常对象,并构造 std::bad_exception 替代地抛出。
2b) 异常规定不允许 std::bad_exception:调用 std::terminate()。
参阅
(C++11 弃用)(C++17 移除) |
违背动态异常说明时调用的函数 (函数) |
(C++11 弃用)(C++17 移除) |
更改要被 std::unexpected 调用的函数 (函数) |
(C++11 弃用)(C++17 移除) |
获得当前的 unexpected_handler (函数) |