c++虽然采取了不少有效的措施(设private保护)以增加数据的安全性,但是有些数据却往往是共享的,如实参与形参,变量与引用,数据及其指针等,人们可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况,而这是人们所不希望出现的。既要使得数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。——引自《c++程序设计,谭浩强》
1、常对象(为了防止成员函数修改常对象中数据成员的值)
类名 const 对象名[(实参列表)] 或 const 类名 对象名[(实参列表)]
a. 定义常对象时,必须对数据成员进行赋值,如 const Time t(12,13,35);
b. 常对象不能调用非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数);
c. 常对象只有调用const型成员函数才能访问数据成员,但此时仍然不能修改常对象中数据成员的值,如需修改将数据成员声明为mutable;
2、常数据成员
a. 只能通过参数初始化列表对常数据成员进行初始化
3、常成员函数
数据成员 | 非const成员函数 | const成员函数 |
非const数据成员 | 可以引用,可以改变值 | 可以引用,不可以改变值 |
const数据成员 | 可以引用,不可以改变值 | 可以引用,不可以改变值 |
const对象的数据成员 | 不可以引用,不可以改变值 | 可以引用,不可以改变值 |
4、指向对象的常指针
类名 * const 指针变量名=对象地址,它在定义时就必须对其初始化, 如Time * const p=&t; const在 * 号的右边,值可变,指针所指对象不可变。
p=&tt; //不合法,指针所指对象不可变4
(*p).hour=12; //合法,值可变
5、指向常对象的指针变量
const 类名 * 指针变量名 const在 * 号的左边,值不可变,指针所指对象可变。
char c='a';
const char *p;
p=&c; //合法,p指针所指对象可以改变
*p=‘b’; //不合法,*p值不能改变