博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++静态成员(1) - 静态成员函数的特性
阅读量:4071 次
发布时间:2019-05-25

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

目录


类中的静态成员函数,拥有下面这些特性。

1.没有this指针

参考下面程序:

#include
class Test{ static Test * fun() { return this; // 编译错误 }};int main(){ return 0;}

编译失败,报错:

`this’ is unavailable for static member functions

静态成员函数其实不需要this指针,因为它们是类级别的,而不是对象级别的。它可以在所有对象之间共享。

2.不能为virtual

也就意味着它不能访问vptr。为何?因为静态成员函数可以不使用对象来调用,vptr对它不适用,因为vptr只在构造函数中生成。

3.不能做为重载函数

如果两个成员函数有着相同函数名称以及参数类型,只是一个是静态函数,另一个非静态,则这两个函数不能重载。

#include
class Test { static void fun() {} void fun() {} // 编译错误}; int main(){ return 0;}

编译失败,报错:

‘void Test::fun()’ and `static void Test::fun()’ cannot be overloaded

4.不能被声明为const/volatile

参考下面程序:

#include
class Test { static void fun() const // 编译错误 { return; }};int main(){ return 0;}

编译失败,报错:

static member function `static void Test::fun()’ cannot have `const’ method qualifier
如果静态成员函数被声明为const,则意味着它的意图是:有权限访问某个特定对象,并禁止对这个对象进行修改。而实际上静态成员函数无法访问某个特定对象。

如果静态成员函数被声明为volatile,则我们可以访问一个volatile(或non-volatile)对象,且禁止编译器对函数代码进行优化,这样的话会因为volatility而影响到对象的状态。

但是,因为静态成员函数无法访问某个特定的对象,则不应该出现这种情况。因此,静态成员函数不允许声明为volatile。

反之,非静态成员函数可以被声明为const volatile。

参考:

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

你可能感兴趣的文章
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
js判断空对象的几种方法
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>