在程序中我们经常会遇到const关键字。
定义的变量的值不能被改变,在整个作用域中都保持固定。换句话说,就是常类型的变量或对象的值不能被更新。
const常量与#define宏定义的区别:[[const与define的区别|区别]]
void f(const int i) {
i++;//错误
}
确保不会改变const修饰的变量
const定义的常量在程序运行过程中只是一份拷贝,而#define定义的常量在内存中有若干个拷贝;
Cconst int a = 10;
int b = a;
const为顶层const,不受影响即可忽略。
Cconst int *const p = new int(10);
左侧const修饰指针,为底层const
右侧const修饰变量,为顶层const,(根据原则,此const可忽略)
const int * p;
底层const
Cint *p1 = p;//错误
p1为int * ,不能接const int *。
Cint * const pc = new int(10);
int * pb = pc;//正确
pc为int *,pb为int *,pb可以接受pc
Cconst int mm = 10;
int * pd = &mm;错误
mm为顶层const,但对mm取地址后,为底层const,必须一致。 pd为int *,不能接const int *。
const int a = 10;
顶层const,可忽略
int b = a; const int b = a; const int & ra = 10;
引用是起别名,底层为指针操作,此const为底层const。
const int & ra = b;
无论b是否改变,ra是b的别名,不会改变b(即不能且不会通过ra来改变b的值)
常量引用可接任意值
引用不是对象时且不进行拷贝,则不满足以上原则
常量引用如果在左侧,右侧可接受任何值
非常量引用 = 常量 (会报错)
引用如果在等号右侧,请忽略它(&)
非常量 = 常量引用 (合理)
本文作者:流浪的将军
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!