C++核心准则边译边学 In.1: Express ideas directly in code 直接在代码中表达想法
2021/12/8 17:17:04
本文主要是介绍C++核心准则边译边学 In.1: Express ideas directly in code 直接在代码中表达想法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
源网址:CppCoreGuidelines
简介(我自己写的,其他是翻译的)
c++核心准则是C++之父Bjarne Stroustrup针对现代C++(C++11\14\17)开发制定的一套,旨在提高程序质量的实时更新准则,在github社区维护。这套准则针对代码安全性、可读性、兼容性、并发及效率等提出了一系列启发性的建议和可行的改进措施。我认为是提升代码质量的一套非常有价值的建议,希望可以坚持翻译下去。
原因
编译器和大多数程序员不会阅读注释和设计文档,但是在代码中表达的语义可以通过编译器和其他工具检查。
例子
class Date { public: Month month() const; // do int month(); // don't // ... };
第一个声明的month
明确表示返回一个Month
并且不会修改Date
的状态。第二个版本留给了读者猜测的空间并且可能导致难以捕获的bug。
反例
这个循环是std::find
的一个受限形式:
void f(vector<string>& v) { string val; cin >> val; // ... int index = -1; // bad, plus should use gsl::index for (int i = 0; i < v.size(); ++i) { if (v[i] == val) { index = i; break; } } // ... }
正例
一个更清晰的表达形式应该是:
void f(vector<string>& v) { string val; cin >> val; // ... auto p = find(begin(v), end(v), val); // better // ... }
设计友好的库能够比直接使用语言特性更好的表达意图(要做什么,而不是怎么做)。
一个C++程序员应该了解基本的标准库,并且适当的使用它。任何程序员都应该了解所在项目的基础库的基本知识,并且适当的使用它们。任何遵循当前准则的程序员应该了解准则适用库,并且适当的使用它。
例子
change_speed(double s); // bad: what does s signify? // ... change_speed(2.3);
更好的方式是去明确浮点数的意义(新速度或者旧速度的增量?)以及使用的单位:
change_speed(Speed s); // better: the meaning of s is specified // ... change_speed(2.3); // error: no unit change_speed(23_m / 10s); // meters per second
我们可以接受一个无单位的double
作为增量,但是这可能很容易出错。如果我们想要同时接受绝对速度和增量,我们最好定义一个Delta
类型。
补充
通常比较难的部分:
- 一致的使用
const
(检测成员函数是否修改类成员;检测函数是否修改按指针或者引用传递的参数)- 标记类型转换(强制转换类型系统)
- 检测模仿标准库的代码(困难)
这篇关于C++核心准则边译边学 In.1: Express ideas directly in code 直接在代码中表达想法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-07Dify + TiDB Vector,快速构建你的AI Agent
- 2024-07-06有没有什么开源的py项目可以对图像进行分类-icode9专业技术文章分享
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享