c++中基类指针引用的对象的打印类型

Print type of object referenced by base-class pointer in C++?

本文关键字:对象 类型 打印 引用 基类 指针 c++      更新时间:2023-10-16

如果我有类A,类B有子类A, typeid(x)应该给出A的类型还是B的类型,如果x由:

A *x = new B();

在我的测试中,我得到了A的类型-这不是很有用-但我不确定这是由于c++的工作方式,还是由于编译器的设置?

示例代码:

#include <iostream>
#include <typeinfo>
// Remember to add a virtual member function in A
// to enable RTTI.
struct A { virtual ~A() {} };
struct B : A { virtual ~B() {}};
int main()
{
   A* ap = new B();
   std::cout << typeid(ap).name() << std::endl;
   std::cout << typeid(*ap).name() << std::endl;
}

输出,使用g++ 4.8.2:

<>之前P1A1 b