C与C++基础–数组指针与指针数组
C与C++基础–结构体struct和typedef struct 区别
C与C++基础–函数
C与C++基础–内存管理
const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
有时候看定义总是一头雾水,我们上图与代码来分析
变量+const变成常量
当我们定义一个变量x = 3的时候变量名是x,存储地址是&x ,存储内容是3.
int x = 3;
当我们定义一个变量x = 3 前面加上const的时候就变成来一个常量,常量名是x,存储地址是&x ,存储内容是3.
const int x = 3;
类似与 #define x = 3;
const与指针类型
const int *p = NULL;
int const *p = NULL;
这俩货是一个意思
const int * const p = NULL;
int const * const p = NULL;
这俩货也是一个意思
例子一:
int y = 4;
int x = 3;
const int *p = &x;
p = &y;//可以的
*p = 4;//错误的
结论: const int * p = &x;
const 修饰的是int这个值不能改变,但是指针p是可以改变的
例子二:
int y = 4;
int x = 3;
int *const p = &x;
p = &y;//错误的
结论:nt *const p = &x;
这里的const是修饰的指针p,指针p一旦被赋值就不能再修改。
例子三:
int y = 4;
int x = 3;
const int *const p = &x;
p = &y;//错误的
*p = 4;//也是错误的
结论:const int *const p = &x;
这里const修饰来指针也修饰了int,这里一旦被赋值,指针不能变,*p也不能变
const 与引用
例子一
int x = 3;
const int &y = x;
x = 20;
//y = 20; 错误的
一下关于const的写法:
const int x = 3; x = 5; ❌
int x = 3; const int y = x; y = 5; ❌
int x = 3; const int *y = &x; *y = 5; ❌
int x =3,z=4; int * const y = &x; y = &z;❌
const int x = 3; const int &y =x; y =5;❌
const int x = 3; int * y = &x; ❌ //这个为什么错呢 因为前面不可变,后面可变所以又风险。
int x = 3; const int 8y = &x; //这个与上面对比这个是对的,前面可变,后面不可变是可以的