【问题标题】:Address of a class member without a class instance?没有类实例的类成员的地址?
【发布时间】:2012-07-05 03:12:12
【问题描述】:

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

class A {
    int b;
}

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

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

【问题讨论】:

  • 你确定b 不是A 的静态成员吗​​?
  • 我确定。我见过一些似乎依赖它而不是静态成员的代码。
  • 那么,你确定blah的类型是int*吗?

标签: c++ class pointers member


【解决方案1】:

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

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

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

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

【讨论】:

  • 这……很有意义。谢谢!
【解决方案2】:

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

我想你想问这个案子:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多