一个现已删除的问题与此类似:
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::*
到底是什么?
A B::*
表示"指向类型为 A
的B
的数据成员的指针。例如:
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();