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

C++ 没有类实例的类成员的地址?,c++,class,pointers,member,C++,Class,Pointers,Member,我偶尔会看到类似的代码: class A { int b; } void foo() { int* blah = &A::b; // Other stuff. } 但是,在没有类实例的情况下获取类成员变量的地址怎么可能有用呢?它的作用是什么?您的代码格式不正确,无法编译。blah的类型不是int*,而是int(A::*)。也就是说,它不是“指向int”的指针,而是“指向类型为int的类类型a的数据成员的指针” 请注意,为了获得指向成员的指针,该成员必须是可访问

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

class A {
    int b;
}

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

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

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

请注意,为了获得指向成员的指针,该成员必须是可访问的。要在
foo()
中计算
&A::b
b
需要是公共数据成员,或者
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

的指针。您确定
b
不是
A
的静态成员吗?我确定。我看到一些代码似乎依赖于它不是静态成员。在这种情况下,你确定
blah
的类型是
int*
?那。。。这很有道理。非常感谢。