• C++最佳实践 | 4. 可维护性


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

    C++最佳实践:

    1. 工具

    2. 代码风格

    3. 安全性

    4. 可维护性(本文)

    5. 可移植性及多线程

    6. 性能

    7. 正确性和脚本

    可维护性

    避免使用编译宏

    宏在编译之前被预处理器所替换,从而使得调试非常困难,因为调试器无法知道源代码来自哪里。

    1. // Bad Idea
    2. #define PI 3.14159;
    3. // Good Idea
    4. namespace my_project {
    5. class Constants {
    6. public:
    7. // if the above macro would be expanded, then the following line would be:
    8. // static const double 3.14159 = 3.14159;
    9. // which leads to a compile-time error. Sometimes such errors are hard to understand.
    10. static constexpr double PI = 3.14159;
    11. };
    12. }

    避免使用布尔值作为函数参数

    在阅读代码时,布尔值无法提供任何额外含义。可以创建一个名称更有意义的独立函数,或者传递含义更明确的枚举值

    参考 http://mortoray.com/2015/06/15/get-rid-of-those-boolean-function-parameters 了解更多信息。

    避免使用裸循环

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

    • 参考 cppreference [2]

    • 观看 C++ Seasoning [3]

    将对 [] 的调用看作是一种潜在的代码坏味道,表明没有在需要的地方使用合适的算法。

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

    1. // Bad Idea
    2. assert(set_value(something));
    3. // Better Idea
    4. [[maybe_unused]] const auto success = set_value(something);
    5. assert(success);

    在release版本中 assert() 将会被删除,从而造成 set_value 无法被调用。

    虽然第二个版本更丑,但总比第一个错误版本好一点。

    正确使用“override”和“final”

    这些关键字使其他开发人员可以清楚知道虚函数可以被如何使用,如果虚函数的签名发生了变化,就可以捕获潜在错误,并有可能向编译器提示可以执行哪些优化(参考: How does the compiler benefit from C++'s new final keyword? [4] )。

    你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。

    微信公众号: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 -

  • 相关阅读:
    Python机器学习实战-特征重要性分析方法(8):方差分析ANOVA(附源码和实现效果)
    YOLO好像也没那么难?
    哈希表(二)
    [Gstreamer] 环境变量
    【EI检索】2022年电子、通信与控制工程国际会议SECCE 2022
    Unity 中3D数学基础-向量
    c 语言基础:L1-049 天梯赛座位分配
    elasticsearch-7.9.3 单节点启动配置
    软件测试 | Jenkins 多任务关联
    LLM 05-大模型法律
  • 原文地址:https://blog.csdn.net/m0_73257876/article/details/126685925