const关键字

const关键字优先考虑修饰其左边的符号,左边没有符号才会修饰右边的符号。

const修饰变量
const int a = 1; 或者int const a = 1; 都可以,通常用前一种。声明时必须定义,定义后不能被修改。

const修饰指针
第一种
int * const p = &x; 把const放在*右边,const修饰指针,即指针声明时必须定义,定义后不能被修改。
第二种
const int * p; 或者int const * p; 都可以,通常用前一种。把const放在*左边,const修饰指针对指向的变量的作用,指针可以修改,指针可以读取指针指向的变量,不能用这个指针修改指针指向的变量,指针指向的变量可以用其他方式修改。一句话总结,指针对指针指向的变量是只读的。有人说它是常量指针,这并不准确,它应该叫只读指针。
const int * const p = &x; 这是前两种的叠加。

下面是对const修饰指针的测试。

代码

结果

const与define常量的对比
const定义的是变量,而define定义的是常量。
define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。
可以说,常变量是有名字的不变量,而常量是没有名字的。

const修饰函数
任何不会修改数据成员的函数都应该声明为const 类型。如果在编写const 成员函数时,不慎修改了数据成员,或者调用了其它非const 成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
int GetCount(void) const; // const 成员函数
关于Const函数的几点规则:
a. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数。
b. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的。
c. const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查。
d. 然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的。

posted @ 2021-02-06 15:11  HSS--  阅读(88)  评论(0)    收藏  举报