Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中typeid和动态转换操作的时间复杂性+;_C++_Time Complexity_Rtti_Dynamic Cast_Typeid - Fatal编程技术网

C++ C+中typeid和动态转换操作的时间复杂性+;

C++ C+中typeid和动态转换操作的时间复杂性+;,c++,time-complexity,rtti,dynamic-cast,typeid,C++,Time Complexity,Rtti,Dynamic Cast,Typeid,抛开所有关于使用typeid和dynamic\u cast的必要性及其对代码维护的可疑影响的担忧,是否有关于这两种动态类型内省机制性能的信息?声称: 在只需要类信息的情况下,在非多态上下文中使用typeid通常比使用dynamic_cast更可取,因为typeid始终是一个常量时间过程,而dynamic_cast可能需要在运行时遍历其参数的类派生格 但是,没有提供引文。因此,我想问一下,这一说法是否属实,这两种机制中的一种在性能方面是否绝对优于另一种。我找不到关于这些操作的时间复杂度的任何界限的

抛开所有关于使用
typeid
dynamic\u cast
的必要性及其对代码维护的可疑影响的担忧,是否有关于这两种动态类型内省机制性能的信息?声称:

在只需要类信息的情况下,在非多态上下文中使用typeid通常比使用dynamic_cast更可取,因为typeid始终是一个常量时间过程,而dynamic_cast可能需要在运行时遍历其参数的类派生格


但是,没有提供引文。因此,我想问一下,这一说法是否属实,这两种机制中的一种在性能方面是否绝对优于另一种。我找不到关于这些操作的时间复杂度的任何界限的信息。

语言标准对这两种操作的复杂度都没有任何要求。因此,您引用的语句没有得到规范的支持。它大概是基于功能的实现方式,或者在实践中已经实现

更大的优先性问题在于,
dynamic\u cast
甚至不清楚如何在非多态上下文中使用



如果您正在进行面向对象的动态多态性,那么您应该更喜欢虚拟函数。

也许,请查看cppreference.com::当应用于多态类型的表达式时,typeid表达式的计算可能会涉及运行时开销(虚拟表查找),否则typeid表达式将在编译时解析。感谢您的引用。对我来说,这表明复杂性是恒定的,因为vtable查找可能只是两个指针解引用,但如果确实如此,则没有明确说明。看起来是这样的:尽管,可能,比较并不公平。使用
typeid
,您可以检查特定的类型,但不能检查该类型是否兼容(就像您可以使用
dynamic\u cast
):似乎
type\u info
真的不必那么便宜。这个问题涉及到使用strcmp的实现。此libstdc++文件似乎已确认:。