我不明白为什么指针不能是多态类型,因为我们可以使用指向派生类的基类指针来调用派生类的虚函数。这表明在运行时,系统可以确定指针是否是多态的,不是吗?
(这是多态类型的typeid的后续问题。)
我不明白为什么指针不能是多态类型,因为我们可以使用指向派生类的基类指针来调用派生类的虚函数。这表明在运行时,系统可以确定指针是否是多态的,不是吗?
(这是多态类型的typeid的后续问题。)
typeid
的行为时使用术语“多态类类型”而不是“多态类型”:typeid
应用于具有多态类类型(10.3)的 glvalue 表达式时,结果是指代表示最派生对象(1.8)的std::type_info
对象(即动态类型),该 glvalue 指的是。[...]typeid
应用于多态类类型之外的表达式时,结果是指代表达式的静态类型的std::type_info
对象。[...]typeid
的结果。
struct A {}; struct B : A {}; int main() { A* ap = new B; }
在这里,ap
被声明为指向基类的指针,但实际上它指向了派生类的对象。 - jogojapan