const是C++中的一个重要的限定符,具有很多的应用方式。
1、定义常量:const int i = 10; ,i被定义为常量,不能被改变;
2、常量的引用:
int s = 2;
const int i = 10;
const int &r1 = i;
const int &r2 = s
这里引用有两种,一种引用的值为常量,一种非常量,虽然不能改变r1,r2的值,但是这里可以通过改变s的值来改变r2的值,因为这里引用只是r2恒定是s的引用,不能改变,但s的值是可变的。
3、指针与const
const与指针有几种组合方式,分别代表指针指向的值不变,指针本身不变,指针指向的值和指针本身都不变;
/*定义指向const的指针(指针指向的内容不能被修改)*/
const int* p1; //推荐写法
int const* p2;
/*定义const指针(由于指针本身的值不能改变所以必须得初始化)*/
int* const p3=&val;
/*指针本身和它指向的内容都是不能被改变的所以也得初始化*/
const int* const p4=&val;
int const* const p5=&val2;
区分前两种的简单方法:
如果const位于*的左侧,则const就是用来修饰指针所指向的内容,即这个指针指向的值不能修改;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量,不能改变。
另外一种方式:
*和指针名之间没有任何修饰符,则表示的是指针所指向的值为常量;
*和指针名有修饰符(const),则表示指针本身的值为常量,不能改变;
4、const与函数
const修饰函数参数:
fun(const int &i, const int *p),这样的意义在于参数在函数执行过程中是不能改变的,它将一直保持调用此函数时传入的值。如果试图修改i,*p值的语句在fun()函数中出现,将导致程序无法编译。其目的是保证实参不被函数内部意外更改的前提下提高传参效率
const修饰函数:
fun() const; 一般是定义在类中的成员函数。有两个意义:
a. const成员函数不被允许修改它所在对象的任何一个数据成员。
b. const成员函数能够访问对象的const成员,而其他成员函数不可以。
在类中,还有一种const对象,其有相应的特殊用法:
const修饰类对象/对象指针/对象引用
1、 const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
2、 const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
5、const static
同时具备const 和static 的特性,既是常量,又只能在本文件中使用,static const是一样的。
6、类型转换
const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除)。
变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。
用法:const_cast(expression)
通过const_cast运算符,也只能将const type*转换为type*,将const type&转换为type&。也就是说源类型和目标类型除了const属性不同,其他地方完全相同。
部分内容参考:
http://blog.csdn.net/Eric_Jo/article/details/4138548
http://www.cnblogs.com/younes/archive/2009/12/02/1615348.html