手机
当前位置:查字典教程网 >编程开发 >C语言 >了解C++编程中指定的异常和未经处理的异常
了解C++编程中指定的异常和未经处理的异常
摘要:noexceptC++11:指定函数是否可能会引发异常。语法ReturnTypeFunctionName(params)noexcept;R...

noexcept

C++11:指定函数是否可能会引发异常。

语法

ReturnType FunctionName(params) noexcept; ReturnType FunctionName(params) noexcept(noexcept(expression);

参数

表达式

计算结果是 True 或 False 的常量表达式。无条件版本相当于 noexcept(true)。

备注

noexcept(及其同义词 noecept(true))指定函数绝不会引发异常,或允许从异常直接或间接调用的任何其他函数传播异常。更具体地说,noexcept 意味着,仅当调用的所有函数也为 noexcept 或 const 并且没有要求运行时检查、应用于类型为多态类类型的 glvalue 表达式的 typeid 表达式或 throw 表达式的潜在已评估转换时,该函数才是 noexcept。但是,编译器不一定会检查可能归因于 noexcept 函数的异常的每个代码路径。如果异常确实到达标记为 noexcept 的函数,则会立即调用 std::terminate,并且不会保证将调用任何范围内对象的析构函数。

使用条件 noexcept 声明的且计算结果为 noexcept(false) 的函数指定它确实允许传播异常。例如,当要复制的对象是普通的旧数据类型 (POD) 时,可将复制其参数的函数声明为 noexcept。此类函数可以如下声明:

#include <type_traits> template <typename T> T copy_object(T& obj) noexcept(std::is_pod<T>) { //. . . }

使用 noexcept 代替异常说明符 throw,后者在 C++11 和更高版本中已弃用。当你确信函数绝不允许异常传播到调用堆栈时,我们建议你将 noexcept 应用到函数。使用 noexcept 声明的函数使编译器可以在多种不同的上下文中生成更高效的代码。

未经处理的 C++ 异常

如果无法找到当前异常的匹配处理程序(或省略号 catch 处理程序),则调用预定义的 terminate 运行时函数。(您也可以在任意处理程序中显式调用 terminate。)terminate 的默认操作是调用 abort。如果您希望 terminate 在退出应用程序之前调用程序中的某些其他函数,则用被调用函数的名称作为其单个参数调用 set_terminate 函数。您可以在程序的任何点调用 set_terminate。 terminate 例程总是调用指定为 set_terminate 的参数的最后一个函数。

以下示例引发 char * 异常,但不包含用于捕获类型 char * 的异常的指定处理程序。对 set_terminate 的调用指示 terminate 调用 term_func。

// exceptions_Unhandled_Exceptions.cpp // compile with: /EHsc #include <iostream> using namespace std; void term_func() { cout << "term_func was called by terminate." << endl; exit( -1 ); } int main() { try { set_terminate( term_func ); throw "Out of memory!"; // No catch handler for this exception } catch( int ) { cout << "Integer exception raised." << endl; } return 0; }

输出:

term_func was called by terminate.

term_func 函数最好是通过调用 exit 来终止程序或当前线程。如果它没有这样做,而是返回到其调用方,则调用 abort。

【了解C++编程中指定的异常和未经处理的异常】相关文章:

解析C++无锁队列的实现代码

C++中抽象类和接口的区别介绍

虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

C++中返回指向函数的指针示例

解析C++浮点数无效值的定义与无效值判定的小结

解析c++中参数对象与局部对象的析构顺序的详解

关于C/C++中static关键字的作用总结

判断指定的进程或程序是否存在方法小结(vc等)

C++类中的常量介绍

C++中用指向数组的指针作函数参数

精品推荐
分类导航