1、const 成员不能改变其所操作的对象的数据成员。const 必须同时出现在声
明和定义中,若只出现在其中一处,就会出现一个编译时错误。
2、在普通的非 const 成员函数中,this 的类型是一个指向类类型的 const
指针(第 4.2.5 节)。可以改变 this 所指向的值,但不能改变 this 所保存
的地址。在 const 成员函数中,this 的类型是一个指向 const 类类型对象的
const 指针。既不能改变 this 所指向的对象,也不能改变 this 所保存的地址。
3、不能从 const 成员函数返回指向类对象的普通引用。const 成
员函数只能返回 *this 作为一个 const 引用。
4、基于成员函数是否为 const,可以重载一个成员函数;同样地,
基于一个指针形参是否指向 const(第 7.8.4 节),可以重载一个函数
5、可变数据成员(mutable data member)永远都不能为 const,甚至当它是
const 对象的成员时也如此。
6、按照与成员声明一致的次序编写构造函数初始化列表
是个好主意。此外,尽可能避免使用成员来初始化其他
成员。
7、对许多类而言,合成复制构造函数只完成必要的工作。只包含类类型成员或
内置类型(但不是指针类型)成员的类,无须显式地定义复制构造函数,也可以
复制。
8、如果类需要析构函数,则它也需要赋值操作符和复制构造函
数,这是一个有用的经验法则。这个规则常称为三法则,指
的是如果需要析构函数,则需要所有这三个复制控制成员。
9、定义智能指针的通用技术是采用一个使用计数。智能指针类将一个计数器与
类指向的对象相关联。使用计数跟踪该类有多少个对象共享同一指针。使用计数
为 0 时,删除对象。使用计数有时也称为引用计数。
10、复制构造函数类似:Exmple(const Exmple &exm): name(exm.name){}
11、赋值操作符类似:Exmple& operator=(const Exmple &exm) { name = exm.name;}