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

标签 c++ class pointers member

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

class A {
    int b;
}

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

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

最佳答案

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

请注意,为了获得指向成员的指针,该成员必须是可访问的。计算 &A::bfoo() , 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/

相关文章:

c++ - 将 char 指针的一部分复制到另一个

c++ - boost::tokenizer_iterator 的问题——如何查看下一个迭代器?

c++ - 使用 Google Mock 的 Mock 方法实现

c++ - 模板而不是 cpp 预处理器以避免链接?

ruby - 如何实现 Watir 类(例如 PageContainer)?

java - 自定义类可以知道调用它的对象的名称吗?

c - 强弱符号 -> double 转 char 数组

c++ - 数字的字节表示

html - 如何覆盖内容 div 中的 CSS 类

c - 将整数指针分配给结构数组并且代码仍然被执行?