C++ const浅析
- 顶层const:表示变量本身是一个const
- 底层const:表示指针所指向的对象是一个const
考虑如下代码:
对指针来说 const 放在变量的左边既是修饰这个变量,例如 p1指向了 int 型变量 i 的地址,那么这个就是顶层 const (因为变量本身就是最外层了也就是顶层),此时不可以再指向其它地址,但是我们可以通过解引用的方式去改变指向 int 型变量 i 的值(解引用后便是 p1 的内部,也就是变量 i 的地址)。
如果 const 放在类型的左边,即底层 const ,此时修饰的是变量的类型,不可以更改所指向对象的值,但是可以更改指向。
总之:
const 在类型之前为底层const,不可以修改值,但可以更改指向。const在变量之前为顶层const,不可以更改指向,但可以通过解引用更改其中的值。
int i = 0;
const int ci = 42; //顶层
int *const p1 = &i; //顶层 *p1 = 1; 可以改变 i 的值
const int *p2 = &i; //底层 *p2 = 1; err 不可以更改值
const int *const p3 = &i; // 左底层,右顶层 都不可以更改