指向成员的指针对于静态成员有意义吗? C++成员特性的指针是有趣和强大的,但我想知道它是或应该只限于一个类的实例化对象,还是可以指向一个静态成员?对于该特性的静态或非静态使用,用例对我来说并不明显,尽管它看起来非常有趣。

指向成员的指针对于静态成员有意义吗? C++成员特性的指针是有趣和强大的,但我想知道它是或应该只限于一个类的实例化对象,还是可以指向一个静态成员?对于该特性的静态或非静态使用,用例对我来说并不明显,尽管它看起来非常有趣。,c++,C++,指向静态的指针实际上是普通的指针,例如 class MyClass { public: static int x; static int f(int a) { return a+1; } }; // ... int* pint = &MyClass::x; // pointer to static property int (*pfunc)(int) = &MyClass::f; // pointer to sta

指向静态的指针实际上是普通的指针,例如

class MyClass 
{
  public: 

    static int x;

    static int f(int a)
    {
        return a+1;
    }

};

// ...

int* pint = &MyClass::x; // pointer to static property
int (*pfunc)(int) = &MyClass::f; // pointer to static method
指向非静态成员的指针是特殊的,因为它们需要一个类实例来解除对值的引用。它们可以被认为是类实例中成员的偏移量,但这非常粗糙,不能应用于方法指针


相反,静态成员实际上非常类似于名称空间的全局变量,可能具有受限的可见性。它们有静态内存地址,独立于类实例——所有实例共享一个静态成员

以下是合法的C++11代码

struct X
{
    static void f() {}
    static int i;

    X() = delete;
};

typedef void(*funcPtr)();

int main()
{
    funcPtr g = &X::f;
    int *   j = &X::i;
}

获取静态成员数据和函数的地址没有错。正如您所看到的,这个类在任何时候都不会被实例化

由于静态成员不依赖于对象,所以它们类似于常规变量。您不能从静态成员创建指向成员的指针。