从指针到基类成员函数的派生类成员函数的指针

时间:2019-09-15 02:29:09

标签: c++ base-class pointer-to-member

要使该程序编译的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的成员还是什么?

1 个答案:

答案 0 :(得分:1)

可以使标准ptr初始化得井井有条的经文是

  

[conv.mem]/2类型为“指向类型B的{​​{1}}成员的指针的prvalue,其中cv T是一个类类型,可以转换为类型的prvalue “指向B类型的D成员的指针”,其中cv T是从D派生( [class.derived] )的完整类...

希望这会有所帮助。