Why Base-to-Derived Dynamic Casting is Only Allowed for Polymorphic Classes
Possible Duplicate:
FAQ: Why does dynamic_cast only work if a class has at least 1 virtual method?
我已经读过,在C ++中,对一组类的层次结构进行动态强制转换,仅在类是多态的情况下(例如,当基类具有虚函数时)才允许进行强制转换。 出现此限制的原因? 用纯虚函数代替基类中的普通虚函数是否更"安全"?
谢谢!
What is the reason for this limitation?
仅当对象是目标类型的实例时,
非多态类不包含任何类型信息,因此无法判断是否是这种情况。因此,转换无法成功。
Is it more 'safe' to have a pure virtual function in place of the normal virtual function in the base class?
就多态性而言,任何一种都很好。如果基类至少具有一个虚函数,则它是多态的,因此可以与
这是标准引起的限制。
在主要实现中,
这是确定类在运行时是否相关的一种方法。此外,对非多态类进行
我的猜测是,如果您尝试在非多态类上使用
当执行
允许执行此操作的机制称为RTTI。
如果类不是多态的,则无法执行该类型检查,因为在运行时不会存储任何类型信息。