为什么静态成员函数不能是const
2015-08-25 17:04
429 查看
static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数。这意味着一个静态成员函数只能访问它的参数、类的静态数据成员和全局变量。
不能用const的原因:
什么时候使用静态数据成员和静态函数呢?
定义数据成员为静态变量,以表明此全局数据逻辑上属于该类。
定义成员函数为静态函数,以表明此全局函数逻辑上属于该类,而且该函数只对静态数据、全局数据或者参数进行操作,而不对非静态数据成员进行操作。
static的第一种含义:修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。
static的第二种含义:修饰局部变量时,表明该变量的值不会因为函数终止而丢失。
static的第三种含义:修饰函数时,表明该函数只在同一文件中调用。
static的第四种含义:修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。
static的第五种含义:修饰类成员函数,如上。
不能用const的原因:
这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它。<span style="line-height:26px">一个静态成员函数访问的值是其参数、静态数据成员和全局变量,而这些数据都不是对象状态的一部分。而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员。既然一个静态成员函数根本不访问非静态数据成员,那么就没必要使用const了。</span>
什么时候使用静态数据成员和静态函数呢?
定义数据成员为静态变量,以表明此全局数据逻辑上属于该类。
定义成员函数为静态函数,以表明此全局函数逻辑上属于该类,而且该函数只对静态数据、全局数据或者参数进行操作,而不对非静态数据成员进行操作。
static的第一种含义:修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。
static的第二种含义:修饰局部变量时,表明该变量的值不会因为函数终止而丢失。
static的第三种含义:修饰函数时,表明该函数只在同一文件中调用。
static的第四种含义:修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。
static的第五种含义:修饰类成员函数,如上。
相关文章推荐
- 各种特殊函数为什么不能是虚函数
- HDU 1394 Minimum Inversion Number
- thinking
- hdu 4277 暴力+set
- FreeMark 常用标签
- java线程研究---(6)暂停Thread:join
- 在我的眼里,生产主管(1)——如何做竞争分析
- 什么牌子的儿童挂面好啊?
- 使用paramiko进行打包操作
- OC面向对象三大特征---封装
- 部署两"公猫"服务器,还得负载均衡哈~~
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
- 【可持久化线段树】[COCI]白雪公主(white)
- C#正则表达式
- Java知识总结----日志系统在项目中的应用(五)
- IDEA工具类似Eclipse中Ctrl+O查找当前类中方法的快捷键
- AngularJs中Factory和Service和Provide不同(写得很好)
- Windows 系统下设置Nodejs NPM全局路径
- 执行mvn 报错 source-1.5 中不支持
- 【Python 练习】随机显示不重复的单词