作用:
1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变它了;
2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为
- const修饰变量
- 变量的值不能改变
- const修饰指针,注意:const只限定它前面的字符
- 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量,int const *x
- 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量,int * const x ,指针不能改变,但指针指向的值可以改变
- 指针常量:不能通过指针来修改变量的值,指针类型的常量,int * const p
- 常量指针:一直指向该变量,不能给该指针赋予其他地址,const int* p,int const * p
- 函数中使用const
- const修饰函数参数
- 表示参数不可变
- 若参数为引用,可以增加效率
- const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效
- const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响,那么是不是没有什么意义:错,重要的目的就是告诉说这个变量不允许被修改,传引用效率会高一点而已。
- 若参数为引用,可以增加效率
- 表示参数不可变
- const修饰函数参数
例子:
常量指针
int a = 10, b = 20;
const int *p = &a;
p = &b; // 指针可以指向其他地址,但是内容不可以改变
*p = 30;//报错,内容不能改变
指针常量
int a = 10, b = 20;
int * const p = &a;
*p = 30; // p指向的地址是一定的,但其内容可以修改
p = &b;//错误,指针不可以指向其他地方
cout << p << endl;
*p = 40;
cout << p << endl;
建议:参数类型与参数名称分开写。
参考:
https://blog.csdn.net/qq_36132127/article/details/81940015
https://blog.csdn.net/ypshowm/article/details/89030156