C++ const的各种用法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值