要使该程序编译的C ++规则是什么?
struct A
{ void f() {}; };
struct B : A
{};
int main()
{
void (B::*ptr)() = &A::f;
(void)ptr;
return 0;
}
我知道A::f
是类B
的成员,但是允许此分配的具体规则是什么?我对此有些困惑。编译器是否检查A::f
的地址是B
的成员还是什么?
答案 0 :(得分:1)
可以使标准ptr
初始化得井井有条的经文是
[conv.mem]/2类型为“指向类型
B
的{{1}}成员的指针的prvalue,其中cv T
是一个类类型,可以转换为类型的prvalue “指向B
类型的D
成员的指针”,其中cv T
是从D
派生( [class.derived] )的完整类...
希望这会有所帮助。