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

Address of a class member without a class instance?

本文关键字:成员 地址 实例      更新时间:2023-10-16

我偶尔会看到一些类似于下面的代码:

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

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

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

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

指向

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

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

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

我想你想问这个案子:

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

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