本篇对c++中const限定符进行详细解释,帮助你更好理解顶层和底层const的含义。
目录
常量
const为变量类型的一种限定符,它可以使得变量的值不能被改变。
定义一个int型的常量:
const int a = 1;
因为const类型的变量一旦被定义后值就不能改变,所以常量在定义时必须进行初始化。
顶层和底层const
顶层和底层const通常是对于指针变量里的const限定符的描述,所以首先来介绍指针和const之间的关系。
指向常量的指针
我们知道,指针也是一种变量,它的类型必须与其所指对象的类型一致(例外:常量指针也可以指向非常量变量),它的值为它所指变量的地址。 所以想要存放常量的地址,只能使用指向常量的指针。
const int a = 1;
int b = 2;
const int* p1 = &a; //指向常量a的指针,不能通过指针p1改变a的值
const int* p2 = &b; //常量指针可以指向非常量b,但是不能通过指针p2改变b的值
p2 = p1; //虽然指针指的是一个常量,但是指针依旧是变量,所以指针的值可以改变
常量指针
值(储存的地址)不能改变的指针叫做常量指针。
int a = 1;
int* const p1 = &a; //指针p1的值不能改变
*p1 = 2; //但是可以通过指针p1改变变量a的值
区分
常量指针里的const限定符叫做顶层const
指向常量的指针的const限定符为底层const
int a = 1;
int* const p1 = &a; //顶层const
const int b = 1;
cosnt int* p2 = &b; //底层const
// int const* p2 = &b; //等价于上条语句
const int* const p3 = &b; //*号左边的const为底层const,*号右边的为顶层const