LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 250|回复: 0

noexcept

[复制链接]
发表于 2024-1-25 22:27:44 | 显示全部楼层 |阅读模式
C++11:指定某个函数是否可能会引发异常。

语法
noexcept-specifier:
  noexcept
  noexcept-expression
  throw ( )
noexcept-expression:
  noexcept ( constant-expression )

参数
constant-expression
类型 bool 的常数表达式,表示潜在异常类型集是否为空。 无条件版本相当于 noexcept(true)。

注解
noexcept-expression 是一种异常规范:一个函数声明的后缀,代表了一组可能由异常处理程序匹配的类型,用于处理退出函数的任何异常。 当 constant_expression 生成 true 时,一元条件运算符 noexcept(constant_expression) 及其无条件同义词 noexcept 指定可以退出函数的潜在异常类型集为空。 也就是说,该函数绝不会引发异常,也绝不允许在其范围外传播异常。 当 constant_expression 生成 false 或缺少异常规范(析构函数或解除分配函数除外),运算符 noexcept(constant_expression) 指示可以退出函数的潜在异常集是所有类型的集合。

仅当函数直接或间接调用的所有函数也是 noexcept 或 const 时,才将该函数标记为 noexcept。 编译器不一定会检查可能归因于 noexcept 函数的异常的每个代码路径。 如果异常确实退出标记为 noexcept 的函数的外部范围,则会立即调用 std::terminate,并且不会保证将调用任何范围内对象的析构函数。 使用 noexcept 而不是动态异常说明符 throw()。 动态异常规范(throw(optional_type_list) 规范)在 C++11 中已弃用,并已在 C++17 中删除,但 throw() 除外,它是 noexcept(true) 的别名。 我们建议你将 noexcept 应用到任何绝不允许异常传播到调用堆栈的函数。 当函数被声明为 noexcept 时,它使编译器可以在多种不同的上下文中生成更高效的代码。 有关详细信息,请参阅异常规范。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表