博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解成员函数的常量性
阅读量:4216 次
发布时间:2019-05-26

本文共 1030 字,大约阅读时间需要 3 分钟。

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

转载地址:http://cdsmi.baihongyu.com/

你可能感兴趣的文章
强大的jQuery焦点图无缝滚动走马灯特效插件cxScroll
查看>>
Yii2.0 数据库查询
查看>>
yii2 db 操作
查看>>
mongodb group 有条件的过滤组合个数。
查看>>
关于mongodb的 数组分组 array group
查看>>
MongoDB新的数据统计框架介绍
查看>>
mongodb 增加全文检索索引
查看>>
QC数据库表结构
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>
测试之途,前途?钱途?图何?
查看>>
反病毒专家谈虚拟机技术 面临两大技术难题
查看>>
几种典型的反病毒技术:特征码技术、覆盖法技术等
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>