你也许有常量的概念并会用关键字const声明一个变量为常量,但是你知道const除了声明常量外,还可以声明const指针和const成员函数。本文将讨论const对象是如何建立、const对象的用途以及他们的语法。
仅仅用一个关键字就可以声明三种截然不同的结构,所以const声明常常让人混淆。让我们仔细看看这些这三种不同的const结构。
当你把某个对象定义为const类型(在这里“对象”一词用的是它的广义语义,例如保存一个变量或者类对象的一段内存)之前,你需要确保程序不会再修改它。Const声明必须包括合适的初始化。代码清单A中包含有不同const对象的实例。
如果把一个指针定义为const类型,那么程序就不能再让它指向一个新的地址。不过const指针所指向的对象仍可以修改,如代码清单B所示。
一个类对象的状态由它的非静态数据成员组成。类中不需要修改对象状态的成员函数应该定义为const类型。你可以在类的成员函数的参数表后面加上关键字const来声明它为const函数。例如:
class Person{
public:
int getAge() const {return age;} //const成员函数
private:
int age;
};
注意const成员函数是约束语法设计(the Design by Contract idiom)的一个重要的组成部分。Const成员函数确保了编程者承诺要实现的功能(如,保持对象的状态不变)由编译器强制实现。任何试图从内部修改const成员的举动都会导致编译时错误的产生:
int Person::getAge() const
{
return ++age; //编译时出错
}
另外,const声明可以证明函数的行为。