c++

c++中const限定符的作用详解

Posted by simple on March 1, 2021

本篇对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