1.关于成员函数的const的一些问题

        在成员函数中,const可以位于返回值前,可以位于参数前面,甚至可以位于函数声明末尾,它们之间的联系和区别经常容易被搞混,于是我写了这篇博客总结了一下。

        首先有如下几个函数声明

T func();				//(1)
const T func();			//(2)
T& func();			    //(3)
const T& func();		//(4)

T func()const;			//(5)
const T func()const;	//(6)
T& func()const;		    //(7)
const T& func()const;	//(8)

        我们知道,不能只凭借返回只类型来重载函数,但是函数末尾的const可以用来重载函数,因此在一个类中,如果出现两个函数的话一定是(1)or(2)or(3)or(4) + (5)or(6)or(7)or(8) 的形式

        函数末尾的const有两个作用:1、进行重载;2、对函数体内的修改权限进行限制

        先谈谈作用1:重载。当类中同时存在这两种函数时,普通对象会调用普通函数,const对象会调用const函数;当类中只有const函数时,无论普通函数还是const函数都调用const函数;当类中只有普通函数时,只有普通对象能调用该函数,const对象调用该函数时会报错,由此可以得到一个比较有用的结论:当打算在类中只设计一个const函数的时候,不必担心普通对象调用会报错。

        再谈谈作用2:限制。当成员函数末尾加上const以后,在函数语句体内就无法对类的成员变量进行修改了,也即在函数语句外是可以修改的,那怎么修改呢?考虑(7)和(8),(7)中返回值是一个引用,假如这里返回一个成员变量的引用,那么在返回以后的后续操作中就可以修改该成员变量的值了,这并不与函数末尾的const矛盾,当然,使用(8)式可以做到即返回引用,又不至修改引用的变量的值。总结一句话:函数末尾加上const以后并不意味和这个函数有关的一切操作都不会修改成员变量的值(可以通过返回成员变量引用做到)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值