const多才多艺,告诉编译器和其他程序员某值应该保持不变。
可以用在class外部修饰global或namespace作用域中的常量,修饰文件,函数,或static对象。
char greeting[] = "hello";
char* p = greeting; //non-const pointer, non-const data
const char* p = greeting; // non-const pointer, const data
char* const p = greeting; // const pointer, none const data
const char* const p = greeting; // const pointer, const data
如果关键字const出现在星号左边,表示被指物为常量。如果出现在星号右边,表示指针自身是常量。如果出现在星号两边,表示被指物和指针都是常量。
以下两种写法一样:
void f1(const widget* pw);
void f2(widget const * pw);
const成员函数
为了确认成员函数可作用于const对象
作用:
- 使class接口容易被理解,明确哪些函数可以改的对象内容
- 操作const对象
若想在const函数中,修改非const成员,可以使用multable关键字修饰。这样可以释放掉non-static成员变量的一些束缚。
写在最后
当const和non-const成员函数有实质等价的代码实现时,令non-const调用const,可以避免代码重复。