引言
现在学习的C++程序设计更多的是对C语言的复习,通过这些复习,我之前有些搞不明白的地方现在豁然开朗,这里对const限制进行解释。
在C++语言中,关键词const可以约束对象的访问性质,使对象一旦被初始化就不允许修改,被约束为只读的对象称为常对象。
标识常量
在C++中被关键字const约束基本类型的内存单元为只读状态,该内存空间不可被修改,就像常数一样,所以被称为标识常量,简称常量。
这种常量只能在定义时赋值,赋值后不可修改。定义格式为:
const 类型 常量标识符 = 常量表达式;
如代码所示:
const int a = 100;
// a = 20; 错误,不能给常量赋值
指向常量的指针
这种用于约束指针间址访问对象。可以理解成,指针指向的内存空间为只读状态,但是使用变量名访问还是变量,也就是说不能通过指针修改该内存空间,但是这个内存空间是可以被修改的。
定义格式为:
const 类型 * 指针 或者 类型 const * 指针
如代码所示:
int a = 100;
const int* p;
p = &a;
a = 10;
// *p = 10; 错误
指针常量
这种用于约束指针指向。也就是说,在这种情况下,指针一经定义就不能被修改。(这里只是对指针进行约束,我们使用变量名还是可以修改存储空间里面存储的数值的。)
定义格式为:
类型 * const 指针
如代码所示:
int a = 100;
int b = 10;
int* const p = &a;
// p = &b; 错误
总结
或许有些情况没有列举到,但是只需要知道什么时候是一定错误的就可以了。
标识常量比较简单,容易记忆和理解。但是指向常量的指针和指针常量不容易区分,这里需要注意一下,可以根据const后面是 * 还是 指针 来区分。当后面是 * 的时候,只需要知道它限制的是间址访问(也就是通过使用 * 的方式修改内存空间)就行;当后面是指针时,只需要知道它限制的是指针(也就是指针不能改变指向)就行。