多态类型是指声明或者继承了至少一个虚函数的类型

对于多态类型,一些信息必须延迟到运行时才可以确定,例如它的实际类型、所调用的虚函数的地址等
类型B继承了声明有虚函数的类型A,因此AB都是多态类型。
struct A
{
    virtual void foo() {} // 声明虚函数
};

struct B : public A
{
    // 隐式继承了虚函数
};

...

B b{};
A& a_rb = b; // 将b绑定到A的左值引用a_rb上

typeid(decltype(a_rb)).name(); // decltype产生的是编译时即可确定的声明类型,因此为A
typeid(a_rb).name()// 由于a_rb是多态类型的glvalue,typeid在运行时计算,因此为B

a_rb.foo();  // 这里调用的是B中的foo,其函数地址是运行时确定的
sizeof(b);   // 这里的sizeof是编译器决定的,通常为8 (64位)
posted on 2021-07-26 16:22  offer快到碗里来~  阅读(98)  评论(0)    收藏  举报