const限定符相关

阅读const限定符一节的时候很是绕了点,发现这里很容易混淆,所以记录一下。

在需要定义变量的值不能被改变的时候,使用const加以限定,如const int buffSize = 512;这里是指变量本身是常量。

而在定义引用和指针的时候,注意是指引用或指针是指向常量的引用或指针,如const int *p;,这里指针p是指向常量的指针(pointer to const), p指向的值必须是一个const类型,而p本身的值(即所存储的地址)则可以改变。这里一定要明确的概念就是指向常量的引用/指针不能用于改变其绑定/所指对象的值

由于引用在初始化后不能再更改绑定对象,不用多说。而要让指针本身是常量的话,需要使用*const来定义常量指针(const pointer)

1
2
int *const p = &i; //p本身的值不能再改变,始终指向i
const int *const pip = π //pip是一个指向常量的常量指针

由此可见,指针本身是常量和指向的对象是常量为两个独立问题。

用名词顶层const(top-level const)表示指针本身为 常量,而用名词底层const(low-level const)表示指针所指的对象为一个常量。

顶层const可用于基本类型在内的任意对像,而底层const则与指针和引用等复合类型的基本类型部分有关。