本系列是开源书C++ Best Practises的中文版,全书从工具、代码格调、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了古代C++我的项目的最佳实际。本文是该系列的第四篇。

可维护性

防止应用编译宏

宏在编译之前被预处理器所替换,从而使得调试十分艰难,因为调试器无奈晓得源代码来自哪里。

// Bad Idea#define PI 3.14159;// Good Ideanamespace 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-funct... 理解更多信息。

防止应用裸循环

理解和了解现有C++规范算法,并付诸实践。

  • 参考cppreference
  • 观看C++ Seasoning

将对[]的调用看作是一种潜在的代码坏滋味,表明没有在须要的中央应用适合的算法。

永远不要应用有副作用的assert

// Bad Ideaassert(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?)。

你好,我是俞凡,在Motorola做过研发,当初在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓重的趣味,平时喜爱浏览、思考,置信继续学习、一生成长,欢送一起交流学习。 \
微信公众号:DeepNoMind

本文由mdnice多平台公布