使该程序编译的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
的成员? 最佳答案
该标准的使ptr
初始化格式正确的经文为
[conv.mem]/2类型“指向B
的cv T
成员的指针”的prvalue,其中B
是类类型,可以转换为类型“指向D
的cv T
成员的指针的prvalue”。 cc>”,其中D
是从B
派生([class.derived])的完整类...
希望这可以帮助。
关于c++ - 从派生类成员函数指向基类成员函数的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57940681/