数组与运算符重载

More Effective C++ 学习笔记

Posted by Echo on April 22, 2020

C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。

数组与多态

  1. 多态和指针算法不能混合在一起,因此不要对数组使用多态
  2. 尽量不要从具体类(concrete classes)派生具体类

数组的静态分配与动态分配:

  1. 静态分配:在栈中分配内存,作用于局部,不能用作函数返回值
  2. 动态分配:需要关键字 new 在堆中分配内存,使用完后要 delete,一般用数组首地址来寻址数组,即数组指针

缺省构造函数

避免无用的缺省构造函数,因为他会使得大多数成员函数都得检测异常,从而浪费计算资源,降低效率。

运算符重载

谨慎定义类型转换函数,注意,单参数构造函数和隐式类型转换操作符(operator修饰)会允许编译器进行隐式类型转换。

隐式类型转换举例,定义一个成员函数为:

class Rational{
public:
    ...
    operator double() const;  // 函数声明尾加const说明这个函数不可以修改类的成员变量
};

消除方法:

  1. 将隐式类型转换操作符转换为显式调用的函数。
  2. 给单参数构造函数添加 explicit 关键字,或者,用 proxy classes 来代替单参数构造函数的参数类型

虽然存在消除方法,但是除非万不得已,不要定义类型转换函数。