首页 > 解决方案 > 从指向基类成员函数的指针派生类成员函数的指针

问题描述

使该程序编译的 C++ 规则是什么?

struct A
{ void f() {}; };

struct B : A
{};

int main()
{
    void (B::*ptr)() = &A::f;
    (void)ptr;
    return 0;
}

我知道那A::f是 class 的成员B,但是允许此分配的具体规则是什么?我对此有点困惑。编译器是否检查地址A::f是成员B还是什么?

标签: c++base-classpointer-to-member

解决方案


标准中使ptr格式良好的初始化的诗句是

[conv.mem]/2 “pointer to member ofBtypecv T”类型的纯右值,其中B是类类型,可以转换为“pointer to member ofDtypecv T”类型的纯右值,其中D是完整的类派生( [class.derived] ) 来自B...

希望这可以帮助。


推荐阅读