C++中的const关键词用法

在C语言和C++中,有一个用来修饰所有变量的关键词const,表示将此变量变成常量的意思。比如,对int型变量加上一个const,那么该变量就是一个常量了,也即该变量无法再发生改变了。例如下面的代码片段:

cont int i = 5;
i = 8;  //此处会产生编译错误,因为i被const修饰,因此i的值不能再改变
同样地,const除了可以修饰基本类型数据外,还可以用来修饰指针和引用,但修饰指针的时候会有常量指针和指针常量之分:
  • 常量指针:const关键词是左结合的关键词,若左边为空则为右结合,也即从左往右读。例如以下代码片段:
const int* p;

此处是一个常量指针,从左往右读,先是常量再是指针。对于对于常量指针,顾名思义,这是一个指针,但指向的是一个常量。也即一旦指向了某个变量,则不能通过指针改变该变量的值,因为该变量被指定为了常量。例如以下代码片段:

const int* p;
int i = 8;
p = &i;  //常量指针指向变量i,相当于把i视为了常量
*p = 5;  //产生编译错误,因为常量的值无法通过指针改变。
int j = 40;
p = &j;  //合法,此处改变的是指针,即将指针更换一个指向的变量,由原来的指向i改为指向j
  • 指针常量:相对于常量指针,这里是一个指针常量,也即,本身是一个常量,但该常量是一个指针,这表示该指针一旦指向了某个变量就不能再指向其他变量,因为这是一个常量,例如以下代码片段:
int* const p;
int i = 8;
p = &i;   //此处指针常量指向i
*p = 5;   //合法,此处的p是常量,而非指向的i是常量
int j = 40;
p = &j;  //此处产生编译错误,因为p是一个常量,前面已经指向了i,此处则不能再指向j
  • 常量指针常量,这表示该指针是常量,指向的变量也是一个常量,这就意味着一旦确定了指向的变量则以上两种情况都满足,例如以下代码片段:
const int* const p;
int i = 8;
p = &i;
*p = 5;  //产生编译错误
int j = 40;
p = &j;  /产生编译错误
  • 除了指针之外,也有引用与关键词const相结合的情况,但是要注意的是引用常量是没有任何意义的,因为引用一旦声明并初始化之后就无法再改变了,相当于指针常量,也即:int& r 相当于const int* p,那么int& const r就相当于是const int* const p了。例如下面代码片段:
int i = 8;
int& const r = &i;
r = 5;  //非法,产生编译错误,错误原因和const int* const相似
int j = 40;
r = j; //不会产生编译错误,但是无意义。

如有错误,欢迎大家批评与指正!

猜你喜欢

转载自blog.csdn.net/WJ_SHI/article/details/81670338