我偶尔会看到与此类似的代码:
class A {
int b;
}
void foo() {
int* blah = &A::b;
// Other stuff.
}
但是如何在没有类实例的情况下获取类成员变量的地址是否有用?它做了什么?
答案 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
的指针。