const限定符
1.在变量前加const限定符使得变量成为常量;因为const对象一旦创建后其值就不能改变,因此const对象必须初始化。
const int a=10;
此处a成为常量。
2.默认情况下,const对象仅在文件内有效,为了解决一个文件定义const变量,多个文件进行声明使用,需要在const变量的定义和声明都加上extern关键字。
extern const int a=10;
extern const int a;
const的引用(简称常量引用)
1.把引用绑定const对象上,我们称之为对常量的引用,因此const引用不能修改被绑定的对象的值;
const int b=10;//定义一个const变量
const int &p=b;//绑定const对象
以下代码是错误的
int &q=b;//一个非常量引用指向一个常量对象是错误的
2.注意引用不是对象,只是绑定了一个对象;因此常量引用只是“对const的引用”的简称;
3.引用的类型需要和初始值类型一致;
4.常量引用可以引用非常量对象;
int i=10;
const int &a=i;
i 的值可以通过其他途径进行修改。
指向常量的指针
1.和引用一样,指针也可以指向常量和非常量;
2.指向常量的指针同样不可以更改所指对象的值;
3.指向常量的指针同样可以指向非常量对象;
const double pi=3.14;
const double *p=π
const指针(常量指针)
与引用不同,指针本身就是个对象,因此允许定义一个指针为常量;同样的,常量指针必须初始化,一旦初始化完成后,它的值(指针存放的地址)就不会再改变了;
注意:不变的是指针存放的地址而不是其指向的值。
int a=10;
int *const p=&a;//定义常量指针
this指针
this指针是一个常量指针,它不能改变指向;
Person *const this=null;
常函数
1.成员函数后加const限定符即为常函数;
2.常函数不可以修改成员变量;
3.声明成员变量时加关键字mutable后,在常函数中依然可以修改其成员变量;
4.常对象只能调用常函数;
5.常函数中this指针不能改变指向也不能改变指向的值;
const Person *const this=null;