在生产代码中使用typeid
通常被认为是不好的做法吗?另外,我注意到typeid
返回type_info
,其中包含一些元数据(例如带有类型名称的字符串);有没有办法停用这个?
答案 0 :(得分:11)
dynamic_cast
。答案 1 :(得分:8)
很难说特定语言功能的使用是“坏”还是“好”。这真的取决于你如何使用它。使用typeid
如果它是适合工作的正确工具则没有任何本质上的错误,但如果对于您正在解决的任何问题有更好的解决方案,那么您应该避免使用typeid
来支持更好的解决方案
使用typeid
通常不是一个好主意,因为通常可以通过使用继承和虚函数来避免使用它。如果您可以通过这种方式更新系统,那么这样做可能是个好主意。
至于您是否可以typeid
避免返回std::type_info
,这不会导致任何性能问题。 typeid
的计算结果为const std::type_info&
,因此它不会深层复制它包含的任何字符串信息。大多数实现都将实际的std::type_info
对象存储在对象的虚函数表中,因此不会在内部进行复制。