const在函数中的意思

//这个函数中这几个const的意义分别是什么
const A *const fun(const A* const one)
{
	return one ;
}


上面函数中这几个const的意义分别是什么呢?(注:A是一个类)

1、fun函数中的参数列表中的const:const A* const one

这个的意思是:one前面的const表示指针one是一个常量指针,其值是不改变的(就是其存放的地址值是不可改变的)。A前面的const表示常量指针one指向的对象是不可改变的。即常量指针one指向的常量对象。

2、函数名fun前面的const的意义:const A*const

*号后面的const表示函数fun返回的指针one的值是不可改变的,即指针所存储的地址是不可改变的。A前面的const表示的意思是函数fun返回的常量指针one指向的对象是不可能改变的。

上面这样做的目的是:

保证了传递进来的数据不会被修改,同时又保证了返回的数据也不会被修改。同时,也是为了实现按值传递的保护机制,且又避免按值传递的开销,比如拷贝构造函数和析构函数的调用,这里就不会调用了。

 

A a ;
a.setA(11) ; //类A的成员函数,因为a不是常量对象,所以其值是可以改变的
const A* const p = fun(&a) ;
p++ ;  //错误:p是常量指针,其实p存放的地址值是对象a的地址
p->setA(12) ; //错误:常量指针p指向的对象是不可修改的

还有一点特别注意:

指向常量的常指针,它指向的对象是不可修改的。这里的不可修改是相对的。怎么说是相对的呢?指向常量的长指针,只是限制我们不可使用该指针来修改它所指向的对象。不能说该对象是不可改变的,我们可以通过其他的方式修改。也就是说它不会改变原始对象的属性。比如:原始对象不是常量对象,所以我们可以通过其他的方式来修改对象。例如:

A a ;

const A* const p = fun(&a) ;

a.setA(11) ;       //正确:允许。因为对象a不是常量对象

p->setA(11) ;     //错误:不可以通过指针p来修改其指向的对象

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值