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

时间:2012-07-05 03:12:13

标签: c++ class pointers member

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

class A {
    int b;
}

void foo() {
    int* blah = &A::b;
    // Other stuff.
}

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

2 个答案:

答案 0 :(得分:8)

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

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

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

A x;
int b_value = x.*blah; // b_value has the value of x.b

答案 1 :(得分:1)

班级A有int b。这意味着b是类A的数据,如果您有b的实例,则可以获得指向A的指针。

我想你想问这个案子:

class A{
   int foo(int i) {
   }
}

编译后,方法foo有地址,你可以得到&A::foo的指针。