c++ - 从指向基类成员函数的指针派生类成员函数的指针
问题描述
使该程序编译的 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
还是什么?
解决方案
标准中使ptr
格式良好的初始化的诗句是
[conv.mem]/2 “pointer to member of
B
typecv T
”类型的纯右值,其中B
是类类型,可以转换为“pointer to member ofD
typecv T
”类型的纯右值,其中D
是完整的类派生( [class.derived] ) 来自B
...
希望这可以帮助。