多态类型是指声明或者继承了至少一个虚函数的类型
对于多态类型,一些信息必须延迟到运行时才可以确定,例如它的实际类型、所调用的虚函数的地址等
类型
B继承了声明有虚函数的类型A,因此A和B都是多态类型。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位)
浙公网安备 33010602011771号