我偶尔会看到类似这样的代码:
class A {
int b;
}
void foo() {
int* blah = &A::b;
// Other stuff.
}
但是在没有类实例的情况下获取类成员变量的地址怎么可能有用呢?它有什么作用?
最佳答案
您的代码格式错误,无法编译。 blah
的类型不是 int*
, 它是 int (A::*)
.也就是说,它不是“指向 int
的指针”,而是“指向类类型为 A
且类型为 int
的数据成员的指针。”
请注意,为了获得指向成员的指针,该成员必须是可访问的。计算 &A::b
在 foo()
, b
需要成为公共(public)数据成员,或 foo()
需要成为 A
的 friend .
指向成员的指针不指向对象。相反,指向成员的指针可以绑定(bind)到对象以获取其数据成员的值。您可以获得 b
的值A
的数据成员通过绑定(bind) blah
对象指向 A
实例的成员指针.例如,
A x;
int b_value = x.*blah; // b_value has the value of x.b
关于c++ - 没有类实例的类成员的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337449/