C++核心准则E.12: 当不可能或不愿意通过抛出异常退出函数时使用noexcept
E.12: Use noexcept when exiting a function because of a throw is impossible or unacceptable
E.12: 当不可能或不愿意通过抛出异常退出函数时使用noexcept
Reason(原因)
To make error handling systematic, robust, and efficient.
为了让错误处理更系统化,健壮和高效。
Example(示例)
double compute(double d) noexcept
{
return log(sqrt(d <= 0 ? 1 : d));
}
Here, we know that compute will not throw because it is composed out of operations that don't throw. By declaring compute to be noexcept, we give the compiler and human readers information that can make it easier for them to understand and manipulate compute.
因为这段代码有不会抛出异常的操作构成,所以我们知道compute函数不会抛出异常。通过将compute函数定义为noexcept,我向编译器和代码的读者传递了可以让它们更容易理解和维护代码的信息。
Note(注意)
Many standard-library functions are noexcept including all the standard-library functions "inherited" from the C Standard Library.
很多标准库函数被定义为noexcept,包含所有从C标准库继承的标准库函数。
Example(示例)
vector<double> munge(const vector<double>& v) noexcept
{
vector<double> v2(v.size());
// ... do something ...
}
The noexcept here states that I am not willing or able to handle the situation where I cannot construct the local vector. That is, I consider memory exhaustion a serious design error (on par with hardware failures) so that I'm willing to crash the program if it happens.
这里的noexcept说明我不愿意或者不能处理局部的vecrot构建失败的情况。也就是说,我认为内存耗尽是严重的设计错误(和硬件错误同样看待),如果这种情况发生,我甘愿终止程序。
Note(注意)
Do not use traditional exception-specifications.
不要使用传统的例外定义方式。
See also(参见)
discussion.
课题讨论。
原文链接https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e12-use-noexcept-when-exiting-a-function-because-of-a-throw-is-impossible-or-unacceptable
- 【技术博客】Spark性能优化指南——基础篇
- 移动端兼容系列 HTML与CSS兼容
- 保存到配置文件
- linux学习第六十篇:Linux监控平台介绍,zabbix监控介绍,安装zabbix,忘记Admin密码如何做
- 支持向量机及Python代码实现
- 【技术博客】Android自定义Lint实践
- UC浏览器皮肤的那个坑
- 文本溢出-超出文本显示为省略号
- 征信区块链解决方案探索(Hyperledger)
- 概率论12 矩与矩生成函数
- Python的hasattr() getattr() setattr() 函数使用方法详解
- 查找字符串中出现最多的字符
- C++工程中常用的宏定义(#define)
- 面向对象系列讲解—认识对象
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Repulsion Loss 遮挡场景下的目标检测
- Selenium4 IDE新特性:弹性测试、循环和逻辑判断
- Go 字符串处理
- Golang 特殊类型
- IntelliJ中基于文本的HTTP客户端
- Pytorch转Msnhnet模型思路分享
- Go socket实现多语言间通信
- Golang不同类型比较
- 牛逼!Intellij IDEA竟然有个功能可自动生成代码,你用过没?
- 导出mysql表结构生成grpc需要的proto文件工具
- 尤大 3 天前发在 GitHub 上的 vue-lit 是啥?
- 微信小程序客服消息功能 php
- CVPR 2020 在频域中学习的DCTNet
- 微信小程序发送模板消息
- Golang 下载文件