const关键字用来标明一个对象是不可更改的,由于其一旦创建后不可更改,所以需要在创建时对const对象进行初始化。
顶层const(指针常量)用来标明一个变量其本身是一个不可更改的常量。内置类型的const为顶层const。对于指针,被顶层const修改后,不可更改指针指向的对象。
const int i = 1;
//顶层const
int *const p = &i;
//顶层const,不可更改p指向的对象
底层const(常量指针)用来标明一个指针或引用所指向的对象是一个不可更改常量。对于指针和引用,被底层const修改后,不可通过指针或引用修改指针指向的对象值。(可以通过其他方式修改其值)
int i = 1;
const int *p = &i;
//底层const
*p = 3;
//错误,不可通过被const修饰的指针修改对象值
i = 3;
//正确,const指针只影响修饰的对象
执行拷贝操作时,顶层const对于拷贝操作无影响
const int i = 1;
int m = i;
//i具有顶层const对于拷贝操作无影响。
但是底层const不可忽略。执行拷贝操作时,拷入与拷出对象必须具有相同的底层const,或者两对象的数据类型必须能够转换。一般来说,非常量可以转换成常量,反之不行。
int i = 1;
const int *p = &i;
//正确,非常量转换为常量
int *q = p;
//错误,常量不可转换为非常量
const int *r = p;
//正确,等号两边都具有底层const
【C++学习--顶层Const与底层Const】参考:《C++primer(第五版)》
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题