详解成员函数的常量性

1.什么是成员函数的常量性?
关于成员函数的常量性当前有两个流行的概念(1)bitwise constness(又称physical constness) (2)logical constness

(1)什么称之为bitwise constness ?
bitwise constness 是指 ,成员函数只有在不更改对象的任何成员变量(static 除外,因为类的static 变量属于类 而不属于对象)时才可以说成员函数具有常量性。也就是说成员函数不更改对象内的任何一个bit。对于 bitwise constness 来说,编译器很容易可以看出成员函数是否具有常量性:编译器只要寻找 成员函数内 是否对成员变量有赋值行为即可。如果在成员函数内对 成员变量进行赋值操作,那么这个成员函数就不具有常量性,并且bitwise constness 正是c++对常量性的定义。所有const 成员函数不可以更改对象内任何 non-static 成员变量。

(2)什么称之为logical constness?
但是在实际编程过程中,我们发现很多成员函数虽然不具备常量性,但可以通过 bitwise constness 常量性的测试。例如 一个更改了“指针所指内容”的成员函数显然不能算是常成员函数,但如果只有指针本身属于对象,指针所指的内容并不属于对象 那么依照bitwise constness方式 来理解常成员函数的编译器并不会报错,这显然不符合常成员函数的定义,因为成员函数 已经修改了成员变量(指针本身并没有发生改变,但是指针所指的内容已经发生改变)这和我们理解的常成员函数并不相符。这种情况导致了 常成员函数的逻辑常量性(logical constness)。

常成员函数的逻辑常量性(logical constness): 是指一个常成员函数可以修改它所处理对象内的某些位(bits),但是只有在程序的使用者检测不出来的情况下才行,因为目前c++编译器 检测成员函数的常量性都是按照 bitwise constness来检测,当常成员函数对成员变量进行修改时,显然不能通过编译器编译。为了支持常成员函数的逻辑常量性,c++引入了mutable 关键字来对去掉成员变量的常量性。所以想在常成员函数中对成员变量进行修改 我们必须在想要修改的成员变量之前有关键字 mutable 来进行修饰。

参考: effective c++ Third Edition

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值