2025-08-06
【1】C/C++
00
请注意,本文编写于 59 天前,最后修改于 59 天前,其中某些信息可能已经过时。

目录

const的作用
1.定义常量
2.类型检查
3.防止修改,起保护作用,增加程序健壮性
4.可以节省空间,避免不必要的内存分配
顶层const与底层const的区分
!!!《C++Primer》: 当执行对象拷贝操作时,常量的顶层const不受影响,而底层const必须一致
总结:

在程序中我们经常会遇到const关键字。

const的作用

1.定义常量

定义的变量的值不能被改变,在整个作用域中都保持固定。换句话说,就是常类型的变量或对象的值不能被更新。

2.类型检查

const常量与#define宏定义的区别:[[const与define的区别|区别]]

3.防止修改,起保护作用,增加程序健壮性

void f(const int i) {
i++;//错误 } 确保不会改变const修饰的变量

4.可以节省空间,避免不必要的内存分配

const定义的常量在程序运行过程中只是一份拷贝,而#define定义的常量在内存中有若干个拷贝;

顶层const与底层const的区分

!!!《C++Primer》: 当执行对象拷贝操作时,常量的顶层const不受影响,而底层const必须一致

C
const int a = 10; int b = a;

const为顶层const,不受影响即可忽略。

C
const int *const p = new int(10);

左侧const修饰指针,为底层const
右侧const修饰变量,为顶层const,(根据原则,此const可忽略)

const int * p;
底层const

C
int *p1 = p;//错误

p1为int * ,不能接const int *。

C
int * const pc = new int(10); int * pb = pc;//正确

pc为int *,pb为int *,pb可以接受pc

C
const 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 许可协议。转载请注明出处!