指向静态类成员

Sad*_*que 1 c++ visual-c++ c++11

class A
{
static int x;
};
Run Code Online (Sandbox Code Playgroud)

如何获取x使用指针成员的地址?

Naw*_*waz 5

因为它是静态的,所以这应该是这样的语法:

int *px = &A::x;  //x is static member
Run Code Online (Sandbox Code Playgroud)

对于非静态成员,这是语法:

 int A::*py = &A::y; //y is non-static member
Run Code Online (Sandbox Code Playgroud)

例:

struct A
{
  static int x;
  int y;
};

int A::x=100;

int main() {
        int *px = &A::x;
        int A::*py = &A::y;

        A a;
        a.y = 200;

        cout << *px << endl;   //used just like normal pointers
        cout << a.*py << endl; //note how the pointer-to-member is used!
        cout << a.y << endl;   //a.*py and a.y are equivalent!
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

100
200
200
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/0xSdW

请注意指向静态成员的指针与指向非静态成员的指针之间的区别,以及它们的使用方式!