const修饰成员函数问题(权限放大与缩小)

修饰本身的const不存在权限放大和缩小的问题(因为这实际上是一种拷贝),只有修饰内容的才有这种问题,如果const修饰的是指针,如果const在*左边,修饰的是指针指向的内容,在*右边,指向的是指针本身。像下面这样,const修饰的是i本身,而对于Int j=i,实际上是一种拷贝,所以对于j的修改并不会影响i,不存在权限放大和缩小的问题。

在函数传参时,const修饰指向内容时,和非const拷贝赋值才涉及权限放大和缩小的问题,如下                

因为print函数中有隐含的*this指针,在图中为Date *const this,const在*右边,修饰的是指针本身,所以不涉及权限的放大和缩小,但我们用const修饰的是d2的内容,在传参时涉及到了权限的放大,因此无法成功传参,而解决办法就是,在函数括号后加上一个const

加上const后,不止const修饰内容的d2可以使用,普通类型的d1也可以使用,d1使用涉及到权限的缩小,传过去后只能读不能修改,但是是可以正常运行的,因为权限可以缩小不能放大。

注意,函数后面加上const虽好,但是不能乱用因为这会导致普通类无法修改成员变量,所以要结合实际情况来使用。

总结:需要修改成员变量的函数不能加const(如构造函数,+=函数,++函数,--函数),不需要修改的就可以加,建议不修改成员变量的都加上const,方便使用如(print函数,+函数,-函数)。像流插入流提取这些不需要加,因为这些不是成员函数,const修饰的是成员函数的指针*this。对声明和定义分离的函数,声明和定义都要加const(如果需要加的话)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值