时间:2021-05-19
noexcept
C++11:指定函数是否可能会引发异常。
语法
参数
表达式
计算结果是 True 或 False 的常量表达式。无条件版本相当于 noexcept(true)。
备注
noexcept(及其同义词 noecept(true))指定函数绝不会引发异常,或允许从异常直接或间接调用的任何其他函数传播异常。更具体地说,noexcept 意味着,仅当调用的所有函数也为 noexcept 或 const 并且没有要求运行时检查、应用于类型为多态类类型的 glvalue 表达式的 typeid 表达式或 throw 表达式的潜在已评估转换时,该函数才是 noexcept。但是,编译器不一定会检查可能归因于 noexcept 函数的异常的每个代码路径。如果异常确实到达标记为 noexcept 的函数,则会立即调用 std::terminate,并且不会保证将调用任何范围内对象的析构函数。
使用条件 noexcept 声明的且计算结果为 noexcept(false) 的函数指定它确实允许传播异常。例如,当要复制的对象是普通的旧数据类型 (POD) 时,可将复制其参数的函数声明为 noexcept。此类函数可以如下声明:
使用 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。
输出:
term_func was called by terminate.term_func 函数最好是通过调用 exit 来终止程序或当前线程。如果它没有这样做,而是返回到其调用方,则调用 abort。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
异常处理基本思想C++的异常处理的基本思想大致可以概括为传统错误处理机制、通过函数返回值来处理错误。1)C++的异常处理机制使得异常的引发和异常的处理不必在同一
今天,总结一下最近编程使用的python异常处理和日志处理的感受,其实异常处理是程序编写时非常重要的一块,但是我一开始学的语言是C++,这门语言中没有强制要求使
异常(exception)是C++语言引入的错误处理机制。它采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,引
1析构函数中是否可以抛出异常首先我们看一个常见的问题,析构函数中是否可以抛出异常。答案是C++标准指明析构函数不能、也不应该抛出异常!C++异常处理模型是为C+
异常(Exception)用于在指定的错误发生时改变脚本的正常流程。什么是异常?PHP5提供了一种新的面向对象的错误处理方法。异常处理用于在指定的错误(异常)情