没有类实例的类成员的地址?

Oni*_*ink 2 c++ pointers class member

我偶尔会看到与此类似的代码:

class A {
    int b;
}

void foo() {
    int* blah = &A::b;
    // Other stuff.
}
Run Code Online (Sandbox Code Playgroud)

但是如何在没有类实例的情况下获取类成员变量的地址会有用吗?它有什么作用?

Jam*_*lis 8

您的代码格式错误,无法编译.它的类型blah不是int*,它是int (A::*).也就是说,它不是"指向a的指针int",它是"指向A类型为的类类型的数据成员的指针int".

请注意,为了获得指向成员的指针,该成员必须是可访问的.为了计算&A::bfoo(),b将需要一个公共数据成员,或foo()将需要的朋友A.

指向成员的指针不指向对象.相反,可以将指向成员的指针绑定到对象以获取其数据成员的值.您可以通过将指向成员的指针绑定到实例来获取对象的b数据成员的值.例如,AblahA

A x;
int b_value = x.*blah; // b_value has the value of x.b
Run Code Online (Sandbox Code Playgroud)