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

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

struct B : A
{};

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


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

最佳答案

该标准的使ptr初始化格式正确的经文为


  [conv.mem]/2类型“指向Bcv T成员的指针”的prvalue,其中B是类类型,可以转换为类型“指向Dcv T成员的指针的prvalue”。 cc>”,其中D是从B派生([class.derived])的完整类...


希望这可以帮助。

关于c++ - 从派生类成员函数指向基类成员函数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57940681/

10-11 23:06
查看更多