2

我偶尔会看到类似这样的代码:

class A {
    int b;
}

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

但是在没有类实例的情况下获取类成员变量的地址怎么可能有用呢?它有什么作用?

4

2 回答 2

8

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

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

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

A x;
int b_value = x.*blah; // b_value has the value of x.b
于 2012-07-05T03:16:41.190 回答
1

该类A具有 int b。这意味着b是类的数据,如果你有一个实例A,你可以得到指针。bA

我想你想问这个案例:

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

编译后,方法 foo 有地址,你可以得到指向&A::foo.

于 2012-08-20T14:00:23.667 回答