繁体   English   中英

指向类的静态成员的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM