什么是A B :: * func()定义?

时间:2014-12-06 13:49:37

标签: c++

现在删除的问题与此类似:

struct A { };
struct B {
    A read();
};

A B::* read()
{
    return A{};
}

此代码将给出错误:

error: cannot convert ‘A’ to ‘A B::*’ in return
  return A{};

正如我们所看到的,这不是read()的类外定义,而是定义返回A B::*的非成员函数。在这种情况下,A B::*究竟是什么?

1 个答案:

答案 0 :(得分:5)

A B::*表示"指向B数据成员A的指针。例如:

struct B {
  A x;
};

...

B b;
A B::*ptr = &B::x; // ptr is the variable declared here.
b.*ptr = foo; // same as b.x = foo;

在你的代码的上下文中,它意味着一个函数(不是成员函数)返回一个指向成员的指针。你可能有

A B::*foo() {
  return &B::x;
}

...

A B::*ptr = foo();