const
1.基础知识
- const变量创建后其值不得更改,并且创建时必须初始化(注意这里的const要修饰的是变量本身,
const *指针名
这里的const修饰的是指针所指向的内容);初始化包括编译时初始化例如:const int a = 12
, 以及运行时初始化例如:const int a = getNum()
- const对象仅对当前文件有效,如果想在多个文件中共享const对象,在该const对象定义以及申明之前都加上
extern
(注意:普通变量的共享,定义时可以不加extern
)
2.对常量的引用(cosnt 变量类型 & 变量名
)
const int a = 12;
const int &b = a;
int &c = a; //wrong,不能用非常量引用绑定常量对象
b=13; //wrong,相当于改变了常量a的值,有悖于常量的原则
- 常量的只能由const X & XX来绑定
- 不可通过常量的引用来更改其绑定常量对象的值
- const X & XX可以是非常量的引用
- const X & XX是变量的别称,在创建同时必须先初始化
int b = 12;
const int &a = b;
b = 13;
a = 13; //wrong,不可以通过const & 来更改其绑定的对象值
cout << a << endl; //最后输出的值是13
-----------------我是高能预警的分割线-----------------
(0_0) 前方高能预警,常量指针+指针常量+指向常量的指针常量(这些名称都是网络上流传的俗称)
3.指向常量的指针(const 变量类型 * 变量名 or 变量类型 const * 变量名
)
注:指向常量的指针又俗称常指针or常量指针
const int a = 12;
const int a2 = 11;
const int *b = &a;
int *c = a; //wrong
*b = 13; //wrong
b = &a2;
cout << *b << endl; //输出值是11
- 常量对象的地址只能使用指向常量的指针存放
- 不可以通过常量的指针来更改其指向常量对象的值,但是有趣的是
const *
的存放的地址值却是可以改变的哦! - const X * XX可以指向非常量对象
- const X * XX 中的的const是修饰的指针所指向的对象,所以指针在创建时可以不进行初始化
4.指针常量(变量类型 * const 变量名
)
注:要和常指针(常量指针)区别开,(*-*)其实也很好区分的哦,const X * XX 叫常量指针(常量符号在前);X * const XX 叫指针常量 (指针符号在前)
- 指针常量在创建时就必须要同时初始化
- 指针常量如果指向的对象不是一个常量,那么就可以通过其来修改指向对象的值,但是由于const修饰的是这个指针对象,那么其自己的值不能改变
int a1 = 11;
const int a2 = 12;
int *const b1 = &a1;
int *const b2 = &a2; //woring
5.指向常量的指针常量 (const 变量类型 * const 变量名
)
- 其值和其指向的值都不能改变