const关键字
一、含义
const:是constant的缩写,“恒定不变”的意思。
二、作用
限定一个变量为只读,被const修饰的东西都受强制保护,可预防意外的变动,提高程序的健壮性。
三、使用
1、定义常量
① 修饰普通变量(在开始声明时就赋值)
const int NUM = 10; // 与int const NUM等价
NUM = 9; // 编译错误,不可再次修改
② 修饰数组
const int a[] = {0, 1, 2, 3, 4};
a[2] = 3; // 编译错误,数组元素不允许被修改
2、指针中的const
① const修饰*p,指向的对象只读,指针的指向可变
int a = 9;
int b = 10;
const int *p = &a;
*p = 11; // 编译错误,指向的对象只读,不可通过p改变
p = &b; // 合法,改变了p的指向
② const修饰p,指向的对象可变,指针的指向不可变
int a = 9;
int b = 10;
int *const p = &a;
*p = 11; // 合法
p = &b; // 编译错误,p是一个const指针,只读,不可变
③ 指向的对象、指针的指向均不变
int a = 9;
int b = 10;
const int *const p = &a;
// p既是一个指针,同时也是指向int类型的const值
*p = 11; // 编译错误,指向的对象只读,不可通过p改变
p = &b; // 编译错误,p是一个const指针,只读,不可变
总结 |
---|
const位于*的左侧,限定指针指向的对象只读,不可变 |
const位于*的右侧,限定指针本身只读,不可变 |
const *p; // 修饰*p,指针指向的对象不可变
*const p; // 修饰p,指针不可变
const *const p; // 第一个修饰*p,第二个修饰p,两者均不可变
3、函数中使用const(修饰函数的参数、返回值、定义体)
① 重点:引用参数中使用const
bool cmp(int a, int b);
bool cmp(const int &a, const int &b);
区别 |
---|
int:按值传递 —— 用于函数将自动产生临时变量用于复制该参数(会 建立 一个类对象的 副本 ,然后传递过去), 效率较低 |
const int &:引用传递—— 仅借用一下参数的别名而已,不需要产生临时对象( 直接传递地址 ), 效率较高 |
注:引用传递有可能改变参数,const修饰可以解决这个问题
② const修饰函数的返回值、定义体(不常使用)