Bo2SS

Bo2SS

Effective C++阅读分享

条款 1:视 C++ 为一个语言联邦#

除了过程、对象、模板、函数四种编程范式,还有元编程形式,其可包括在泛型编程里,即模板;STL 就是元编程的一个典范

  • 可体会学习 C++ 的方法

条款 2:尽量以 const/enum/inline 替换 #define#

能不用 #define 就不用,为了方便调试;而用 define 容易掩盖错误,因为所有宏对编译器不可见

  1. 对于单纯常量,最好用 const 对象或者 enums
  2. 对于形似函数的宏,最好用 inline 函数

条款 3:尽可能使用 const#

数据意义上的 const VS. 逻辑意义上的 const

  • 编译器强制实施前者,我们编写程序时使用后者
  • 前者:真正数据意义上的 const 是很难实现的,涉及到指针,可能通过其他方式改变数据
  • 后者:核心的数据没变,就可以认为是逻辑意义上的 const

PS:const 对象和方法

image-20210707184228548
  • const 对象:不能调用非 const 方法,因为非 const 方法内的变量可能发生改变
  • const 方法
    • 内部是不能修改成员属性的
    • mutable 变量:逻辑上的 const,虽然变量可改变,但不是核心数据

条款 4:确定对象被使用前已经先被初始化#

1、手动初始化内置型对象

  • C++ 并不保证会初始化内置型对象

2、构造函数的赋值最好使用初始化列表

image-20210707184301293
  • 初始化列表调用的是构造函数
    • 构造函数和赋值运算符在 C++ 中完全是两个概念
    • 构造函数主要负责对象初始化
  • 初始化列表(初值列)列出的成员顺序应该与它们在类内声明的顺序一致
    • 所见顺序即实际顺序,方便维护
    • 即使反着写,程序还是按照声明顺序初始化变量
  • 减少 “跨编译单元之初始化次序” 问题,以 local static 对象替换 non-local static 对象
    • 尽量跨文件初始化的依赖关系

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。