前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++最佳实践 | 4. 可维护性

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

作者头像
C语言与CPP编程
发布2022-10-31 16:50:17
2280
发布2022-10-31 16:50:17
举报
文章被收录于专栏:c语言与cpp编程c语言与cpp编程

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

C++最佳实践:

1. 工具

2. 代码风格

3. 安全性

4. 可维护性(本文)

5. 可移植性及多线程

6. 性能

7. 正确性和脚本

可维护性

避免使用编译宏

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

代码语言:javascript
复制
// 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
代码语言:javascript
复制
// 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 -

点击阅读原文加入知识星球

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言与CPP编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可维护性
    • 避免使用编译宏
      • 避免使用布尔值作为函数参数
        • 避免使用裸循环
          • 永远不要使用有副作用的assert
            • 正确使用“override”和“final”
            • 参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档