一:常变量
在定义变量时,如果加上关键字const,则变量的值在运行期间不能改变,这种变量就称为常变量(constant variable),又称只读变量,在定义常变量时必须同时对它进行初始化(即指定其值)此后它的值不能再改变。
eg: const int a = 2;
eg: 可以用表达式对常变量进行初始化:
const int b = 3 + 2 ;
const int c = 3 * cos(1.5) ; // 使用了系统标准数学函数,必须加上包含该函数有关信息的头文件:# include<cmath> 或 #include<math.h>
注:区别用#define命令定义的符号常量和用const定义的常变量:
符号常量只是用一个符号代表一个字符串,在预编译时把所有的符号常量替换为所制定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。
常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof()运算符测出其长度。与一般变量唯一不同的是指定变量的值不可以改变。
二: 常指针:
将指针变量声明为const型,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。
定义指向对象的常指针的一般形式:
类名 * const 指针变量名 = 对象地址
eg : Time t1(10, 11, 12);
Time * const p = &t1;
注:指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向对象中数据成员的值。
三:常对象:
在定义对象的时候指定对象为常对象,常对象中的数据成员为常变量且必须要有初值。
类名 const 对象名(实参表列);
或:
const 类名 对象名 ( 实参表列);
eg : Time const t1(10, 20, 30) ;
注意:在所有的场合里,对象t1中左右的数据成员的值不允许被修改。
如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了有系统自动调用的隐式的构造函数和析构函数)
四:指向常对象的指针变量
定义指向常变量的指针变量的一般形式为:
const 类型名 *指针变量名 ;
(1)、如果一个对象已经被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的(指向非const型对象的)指针变量去指向他。
(2)、如果定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过之阵来改变的;
(3)、指向常对象的指针最常用于函数的形参,目的是在保护形参指针所指向的对象,使它在函数的执行过程中不被改变;
Time * const p; // 指向对象的常指针变量
const Time *p; // 指向常对象的指针变量
小结:
Time const t1;(或 const Time t1) // t1是常对象,其值在任何情况下都不能改变;
void Time :: fun() const ; // fun是Time类的常成员函数,可以引用,但不能修改本类中的数据成员;
Time * const p; // p是指向Time对象的常指针,p的值(即p的指向)不能改变;
const Time *p; // p是指向Time类常对象的指针,其指向的类对象的值不能通过指针来改变;
Time &t1 = t; // t1是Time类对象t的引用,t和t1指向同一段内存空间;