const关键字的作用:
1. 可以定义const常量,具有不可变性
2. 便于进行类型检查
3. 保护被修饰的东西,防止意外修改
4. 为函数重载提供了参考
void fun(int i){}
void fun(int i)const{}//是上面函数的重载
5.可以节省空间,避免不必要的内存分配
const A
定义一个常量, 声明的同时必须进行初始化,一旦完成,值将不能被改变。
int i = 1;
const int t1 = 10;
const int t2 = i;
t1 = 3; //错误 t1不能被修改
const int t3; //错误 未初始化
const B*
定义一个指向常量的指针,其所指对象的值不能被改变
const int i = 1;
const int j = 2;
const int* p = &i;
*p = 3; //错误 不能更改p所指对象的值
const int *q = new int(4);//正确 q指向的是new出来的对象的地址
区分:
1)const int *p
2)char* int p
const关键字用于修饰常量
对于1):p是一个指向常量字符的指针,int的值不变,若是该字符的值在定义时初始化后就不能再改变。
对于2):p是一个指向整型的常量指针,p的指向不能变。
即:const int* 指针指向的对象不可以改变,但指针本身的值可以改变;int* const 指针本身的值不可改变,但其指向的对象可以改变。
int v1 = 10;
int v2 = 20;
int* const p = &v1;
p = &v2; //错误 不能改变p本身的值
*p = 30; //正确 可以改变p所指对象的值
const int* q = &v1;
*v1 = 40; //错误 不能改变q所指对象的值
q = &v2; //正确 可以改变q指针本身的值
记忆方法:
从右向左看(以*为分界线)
1)可以记为:p是一个指针,指向一个整型常量
2)可以记为:p是一个常量指针,指向一个整型变量
const int* const str:str是一个指向常量对象的常量指针,既不可以改变指针本身的值,也不可以改变指针指向的对象。
const C&
对常量的引用, 常量引用不能修改其绑定的对象
int i = 1;
const int s = 10;
const int& t = s;//正确
t = 3; //错误 不能改变引用所指的对象
允许使用一个常量引用绑定一个非常亮对象、字面值、表达式,但引用的类型与引用所指的类型必须一致
const D*& 与D *const&
指向常量对象的指针的引用,分两步理解:
const D*是指向常量的指针
const D*& 指向常量指针的引用
const int i = 1;
const int j = 1;
const int *p = &i;
const int *q = &j;
const int * &s = p;
*s = 10; //错误 s指向的是常量对象 常量对象的值不能被改变
s = q; //正确
int i = 1;
int j = 1;
int *const t1 = &i;
int *const t2 = &j;
int *const &r = t1;
t1 = t2; //错误 t1是常量指针 其本身的值不能被改变
*t1 = 3; //正确