关键词:
本系列是开源书C++ Best Practises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第四篇。
C++最佳实践:
4. 可维护性(本文)
5. 可移植性及多线程
6. 性能
7. 正确性和脚本
可维护性
避免使用编译宏
宏在编译之前被预处理器所替换,从而使得调试非常困难,因为调试器无法知道源代码来自哪里。
// Bad Idea
#define PI 3.14159;
// Good Idea
namespace my_project
class Constants
public:
// if the above macro would be expanded, then the following line would be:
// static const double 3.14159 = 3.14159;
// which leads to a compile-time error. Sometimes such errors are hard to understand.
static constexpr double PI = 3.14159;
;
避免使用布尔值作为函数参数
在阅读代码时,布尔值无法提供任何额外含义。可以创建一个名称更有意义的独立函数,或者传递含义更明确的枚举值。
参考 http://mortoray.com/2015/06/15/get-rid-of-those-boolean-function-parameters 了解更多信息。
避免使用裸循环
了解和理解现有C++标准算法,并付诸实践。
参考cppreference[2]
观看C++ Seasoning[3]
将对[]
的调用看作是一种潜在的代码坏味道,表明没有在需要的地方使用合适的算法。
永远不要使用有副作用的assert
// Bad Idea
assert(set_value(something));
// Better Idea
[[maybe_unused]] const auto success = set_value(something);
assert(success);
在release版本中assert()
将会被删除,从而造成set_value
无法被调用。
虽然第二个版本更丑,但总比第一个错误版本好一点。
正确使用“override”和“final”
这些关键字使其他开发人员可以清楚知道虚函数可以被如何使用,如果虚函数的签名发生了变化,就可以捕获潜在错误,并有可能向编译器提示可以执行哪些优化(参考: How does the compiler benefit from C++'s new final keyword?[4])。
微信公众号:DeepNoMind
参考资料
[1]
C++ Best Practises: https://lefticus.gitbooks.io/cpp-best-practices/content/
[2]cppreference: https://en.cppreference.com/w/cpp/algorithm
[3]C++ Seasoning: https://www.youtube.com/watch?v=qH6sSOr-yk8
[4]How does the compiler benefit from C++'s new final keyword?: https://stackoverflow.com/questions/7538820/how-does-the-compiler-benefit-from-cs-new-final-keyword
- END -点击阅读原文加入知识星球
c++最佳实践|1.工具(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第一篇。C++最佳实践:1.工具(本文)2.代码风... 查看详情
c++最佳实践|1.工具(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第一篇。C++最佳实践:1.工具(本文)2.代码风... 查看详情
c++最佳实践|2.代码风格(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第二篇。C++最佳实践:1.工具2.代码风格(本文)... 查看详情
c++最佳实践|2.代码风格(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第二篇。C++最佳实践:1.工具2.代码风格(本文)... 查看详情
c++最佳实践|3.安全性(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第三篇。C++最佳实践:1.工具2.代码风格3. 安全性(... 查看详情
c++最佳实践|5.可移植性及多线程(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第五篇。C++最佳实践:1.工具2.代码风格3. 安全性4. 可... 查看详情
c++最佳实践|5.可移植性及多线程(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第五篇。C++最佳实践:1.工具2.代码风格3. 安全性4. 可... 查看详情
c++最佳实践|3.安全性(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第三篇。C++最佳实践:1.工具2.代码风格3. 安全性(... 查看详情
c++最佳实践|3.安全性(代码片段)
...actises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第三篇。C++最佳实践:1.工具2.代码风格3. 安全性(... 查看详情
11个flutter最佳实践(代码片段)
...实践学习最佳实践,用Flutter提高代码质量、可读性、可维护性和生产率。1.将代码重构为widgets而不是methods重构成一个方法可能看起来很诱人,但是当构建方法太大时,它可能会重新构建,即使构建方法内部没有... 查看详情
聊聊typescript类型声明那些最佳实践(代码片段)
...态类型校验和语法增强的利器,为了更好的代码可读性和可维护性,我们一个个老工程都坦然接受了用TypeScript重构的命运。然而在改造的过程中,逐步意识到TypeScript这门语言的艺术魅力人狠话不多,下面我们先来聊一下TypeScript... 查看详情
salesforce开发整理代码开发最佳实践(代码片段)
在Salesforce项目实施过程中,对项目代码的维护可以说占据极大的精力,无论是因为项目的迭代,还是需求的变更,甚至是项目组成员的变动,都不可避免的需要维护之前的老代码,而事实上,几乎没有任何一个项目的整个... 查看详情
js最佳实践
1.可维护性:可理解性:理解意图和一般途径 直观性: 可适应性 可拓展性 可调试性2.代码约定: 1.可读性:缩进与注释。以下地方需要进行注释: a.函数和方法:描述目的和用于完成任务使用的算法... 查看详情
聊聊typescript类型声明那些最佳实践(代码片段)
...型校验和语法增强的利器,为了更好的代码可读性和可维护性,我们一个个老工程都坦然接受了用TypeScript重构的命运。然而在改造的过程中,逐步意识到TypeScript这门语言的艺术魅力人狠话不多,下面我们先来聊... 查看详情
聊聊typescript类型声明那些最佳实践(代码片段)
...型校验和语法增强的利器,为了更好的代码可读性和可维护性,我们一个个老工程都坦然接受了用TypeScript重构的命运。然而在改造的过程中,逐步意识到TypeScript这门语言的艺术魅力人狠话不多,下面我们先来聊... 查看详情
临时维护页面的最佳实践方法和状态代码是啥?
】临时维护页面的最佳实践方法和状态代码是啥?【英文标题】:Whatisthebestpracticeapproachandstatuscodefortemporarymaintenancepages?临时维护页面的最佳实践方法和状态代码是什么?【发布时间】:2010-09-1503:56:18【问题描述】:对于不应暂... 查看详情
lerna+yarnworkspace+monorepo项目的最佳实践(代码片段)
1.monorepo管理对于维护过多个package(功能相近)的同学来说,都会遇到一个选择题,这些package是放在一个仓库里维护还是放在多个仓库里单独维护。Multirepo是比较传统的做法,即每一个package都单独用一个仓库来进行管理... 查看详情
flutter最佳实践(代码片段)
学习最佳实践,用Flutter提高代码质量、可读性、可维护性和生产率。1.将代码重构为widgets而不是methods重构成一个方法可能看起来很诱人,但是当构建方法太大时,它可能会重新构建,即使构建方法内部没有任何... 查看详情