C++中typeid和dynamic_cast操作的时间复杂度
Time complexity of typeid and dynamic_cast operations in C++
抛开所有关于使用 typeid
和 dynamic_cast
的必要性及其对代码维护的可疑影响的担忧,是否有关于这两种动态类型内省机制的性能的任何信息? The Wikipedia article on RTTI 声称:
The use of typeid, in a non-polymorphic context, is often preferred over dynamic_cast<class_type> in situations where just the class information is needed, because typeid is always a constant-time procedure, whereas dynamic_cast may need to traverse the class derivation lattice of its argument at runtime.
但是没有提供引文。因此,我想问一下这种说法是否属实,以及这两种机制中的一种是否应该在性能方面比另一种更受青睐。我无法找到有关这些操作的时间复杂度的任何界限的信息。
语言标准对任一操作的复杂性没有强加任何要求。因此,您引用的声明不受规范支持。它大概是基于功能如何,或者已经在实践中实现。
关于优先权声明的更大问题是,目前尚不清楚 dynamic_cast
如何在非多态上下文中使用。
如果你正在做面向对象的动态多态,那么你应该更喜欢虚函数。
抛开所有关于使用 typeid
和 dynamic_cast
的必要性及其对代码维护的可疑影响的担忧,是否有关于这两种动态类型内省机制的性能的任何信息? The Wikipedia article on RTTI 声称:
The use of typeid, in a non-polymorphic context, is often preferred over dynamic_cast<class_type> in situations where just the class information is needed, because typeid is always a constant-time procedure, whereas dynamic_cast may need to traverse the class derivation lattice of its argument at runtime.
但是没有提供引文。因此,我想问一下这种说法是否属实,以及这两种机制中的一种是否应该在性能方面比另一种更受青睐。我无法找到有关这些操作的时间复杂度的任何界限的信息。
语言标准对任一操作的复杂性没有强加任何要求。因此,您引用的声明不受规范支持。它大概是基于功能如何,或者已经在实践中实现。
关于优先权声明的更大问题是,目前尚不清楚 dynamic_cast
如何在非多态上下文中使用。
如果你正在做面向对象的动态多态,那么你应该更喜欢虚函数。