条款3 尽可能使用const
条款3 尽可能使用const
关键字const 出现在星号*左边,表示被指物是常量。在星号 * 右边 表示指针自身是常量,如果出现在两边,表示两者都是常量
void f1(const Widget* pw);//f1获得一个指针,指向一个常量(不变)对象
void f1(Widget const * pw);//两种形式一样
STL迭代器是以指针为根据塑模出来,所以迭代器作用像T*指针。
声明迭代器为const就想声明const指针(即声明一个T* const指针)。表示迭代器不得指向不同的东西,但是所指东西的值可以改变。
如果希望模拟一个const T *指针,则需要const_iterator
const成员函数
将const实施与成员函数的目的:确认该成员函数可作用于const对象
两个成员函数如果只是常量性不同,可以被重载
利用mutable(可变的)。
可以释放掉non-static成员变量的bitwise constness约束。
在const和non-const成员函数中避免重复
这之中存在两个转型动作。
第一次:为*this添加const(调用operator[]时可以调用const版本)。
第二次:从const operator[]的返回值中移除const
但是令const版本调用non-const版本是不对的。因为const成员函数承诺绝不改变其对象的逻辑状态。non-const对象没有这般承诺。
总之:
- 将一些东西声明为const可以帮助编译器检测出错误用法。
- 编译器强制bitwise constness,即const函数应当是无法更改对象的。但还是有可能改变常量对象的值。(如指针)。自己写程序时要自己有概念(概念上的常量性)
- 当const和non-const成员函数内代码重复(实质等价)时,让non-const版本去调用const版本避免代码重复。为什么不让const去调用non-const版本 是有原因的。
本文来自博客园,作者:{BailanZ},转载请注明原文链接:https://www.cnblogs.com/BailanZ/p/16091307.html