指向基类非虚函数的指针

时间:2021-01-14 08:09:16

标签: c++

代码:

#include <iostream>

struct A
{
    void f() { std::cout << "A\n"; }
};

struct B : public A
{
    void f() { std::cout << "B\n"; }
};

int main()
{
    void (A::*pf)() = static_cast<void(A::*)()>(&B::f);
    A* p = new B;
    (p->*pf)(); // (1)
}

令人惊讶的是,行 (1) 打印了 B,但是,它是未定义的行为,还是格式错误的代码?仅仅因为 thispf 指向 B 内部,而所有静态类型指向 A 内部,它调用“错误”函数似乎非常令人惊讶。这里不应该是静态类型吗?

0 个答案:

没有答案
相关问题