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

Pointer to derivate class member function from pointer to base class member function

本文关键字:成员 函数 指针 基类 派生      更新时间:2023-10-16

编译这个程序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类型为"指向类型cv TB成员的指针"类型的 prvalue,其中B是类类型,可以转换为类型为 "指向类型cv TD成员的指针"类型的 prvalue,其中D是从B派生的完整类([class.derived]( ...

希望这有帮助。