条款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版本 是有原因的。
posted @ 2022-04-02 11:46  BailanZ  阅读(25)  评论(0编辑  收藏  举报