从这个参考文献:
(8.3.3 / 3)指向成员的指针不得指向a的静态成员 class(9.4),具有引用类型的成员,或“ cv void。”
为什么指针不能指向类的静态成员?
struct S {
static int f() { /*...*/ };
};
int main()
{
int (S::*s)() = &S::f; // why?
}
答案 0 :(得分:4)
为什么指针不能指向类的静态成员?
因为出于成员资格的目的,不是成员,仅仅是为了范围。除了范围之外,静态成员就像自由函数一样,不附加到类的实例。您可以使用非成员函数指针:
int (*s)() = &S::f;
答案 1 :(得分:1)
每当您执行T::*
时,您都会说“此事需要使用T
的实例”。该语句不适用于static
函数,这些函数可以在没有任何类实例的情况下调用。
答案 2 :(得分:0)
您必须使用常规函数指针,如下所示:
int (*s)()=&S::f;
与GMan一样,静态方法不适用于实例,因此它们不会收到隐藏的this
指针。这有效地使它们具有与具有相同参数的实例方法不同的签名。