cpp/error/unexpected handler:修订间差异

来自cppreference.com
Lynnboy留言 | 贡献
无编辑摘要
Lynnboy留言 | 贡献
无编辑摘要
 
第1行: 第1行:
{{cpp/title|unexpected_handler}}
{{cpp/title|unexpected_handler}}
{{cpp/error/navbar}}
{{cpp/error/navbar}}
{{dcl begin}}
{{headerexception|deprecated=c++11|until=c++17|
{{dcl header | exception}}
{{dcl | deprecated=c++11 | until=c++17 |
typedef void (*unexpected_handler)();
typedef void (*unexpected_handler)();
}}
}}
{{dcl end}}


{{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|std::terminate()}}。若安装空指针值(用 {{lc|std::set_unexpected}}),则实现可以替代地恢复默认处理函数。
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}}:调用 {{c|std::terminate()}}。
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> 定义
typedef void (*unexpected_handler)();
(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
(函数) [编辑]