[英]Pointers to static members of class
从此参考:
(8.3.3 / 3)指向成员的指针不得指向类(9.4)的静态成员,具有引用类型的成员或“ cv void”。
为什么指针不能指向类的静态成员?
struct S {
static int f() { /*...*/ };
};
int main()
{
int (S::*s)() = &S::f; // why?
}
为什么指针不能指向类的静态成员?
因为出于成员资格的目的,它不是成员,仅出于范围的目的。 除了作用域之外,静态成员就像自由函数一样,未附加到类的实例上。 您可以使用非成员函数指针:
int (*s)() = &S::f;
每当您执行T::*
,您就在说“这件事需要T
的实例才能使用。” 该语句不适用于static
函数,这些static
函数无需类的任何实例即可调用。
您必须使用常规函数指针,如下所示:
int (*s)()=&S::f;
就像GMan所说的那样,静态方法不适用于实例,因此它们不会收到隐藏的this
指针。 这实际上使它们与具有相同参数的实例方法具有不同的签名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.