C ++:在生产代码中使用typeid

时间:2011-06-15 23:06:13

标签: c++ typeid

在生产代码中使用typeid通常被认为是不好的做法吗?另外,我注意到typeid返回type_info,其中包含一些元数据(例如带有类型名称的字符串);有没有办法停用这个?

2 个答案:

答案 0 :(得分:11)

  1. 取决于你在使用typeid做什么。如果您正在使用多态性的地方,那么当然这很糟糕。但是,在客户的机器上抛出这样的痕迹或其他东西就可以了。
  2. 唯一的方法是在编译器上禁用RTTI。没有标准的方法。请注意,这也会禁用dynamic_cast

答案 1 :(得分:8)

很难说特定语言功能的使用是“坏”还是“好”。这真的取决于你如何使用它。使用typeid如果它是适合工作的正确工具则没有任何本质上的错误,但如果对于您正在解决的任何问题有更好的解决方案,那么您应该避免使用typeid来支持更好的解决方案

使用typeid通常不是一个好主意,因为通常可以通过使用继承和虚函数来避免使用它。如果您可以通过这种方式更新系统,那么这样做可能是个好主意。

至于您是否可以typeid避免返回std::type_info,这不会导致任何性能问题。 typeid的计算结果为const std::type_info&,因此它不会深层复制它包含的任何字符串信息。大多数实现都将实际的std::type_info对象存储在对象的虚函数表中,因此不会在内部进行复制。