本文共 1098 字,大约阅读时间需要 3 分钟。
目录
类中的静态成员函数,拥有下面这些特性。
参考下面程序:
#includeclass Test{ static Test * fun() { return this; // 编译错误 }};int main(){ return 0;}
编译失败,报错:
`this’ is unavailable for static member functions静态成员函数其实不需要this指针,因为它们是类级别的,而不是对象级别的。它可以在所有对象之间共享。
也就意味着它不能访问vptr。为何?因为静态成员函数可以不使用对象来调用,vptr对它不适用,因为vptr只在构造函数中生成。
如果两个成员函数有着相同函数名称以及参数类型,只是一个是静态函数,另一个非静态,则这两个函数不能重载。
#includeclass Test { static void fun() {} void fun() {} // 编译错误}; int main(){ return 0;}
编译失败,报错:
‘void Test::fun()’ and `static void Test::fun()’ cannot be overloaded参考下面程序:
#includeclass 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/