C++之const

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 变量名

  • 其值和其指向的值都不能改变
posted @ 2017-02-20 22:53  咿呀静候轮回  阅读(166)  评论(0编辑  收藏  举报