我有两个类 Base
和 Derived
如下:
class Base
{
public:
};
class Derived : public Base
{
public:
};
和主要功能:
int main()
{
Base* ptr = new Derived;
std::cout << typeid(*ptr).name() << endl;
delete ptr;
system("pause");
}
程序输出显示 class Base
,我预计它会显示 class Derived
。但是当我在 Base
类中添加一个虚拟方法时,现在输出显示 class Derived
!
为什么 RTTI 至少需要一个虚方法?
最佳答案
因为语言规范是这么说的。 RTTI 仅适用于多态类型;也就是说,具有虚函数的类型。对于其他类型,typeid
返回其参数的静态类型的类型信息。
如果你问的是这样做的理由:它有一个运行时成本(通常,每个对象中的一个指针指向每个类的元数据,它支持虚拟调度和 RTTI),并且它会是一个如果您不得不为所有类型支付该价格,则感到遗憾,无论您是否想在它们上使用 RTTI。
关于c++ - 运行时类型信息的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28092974/