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

Pau*_*nta 8 c++ typeid

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

Bil*_*eal 11

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


tem*_*def 8

很难说特定语言功能的使用是"坏"还是"好".这真的取决于你如何使用它.typeid如果它是适合工作的正确工具,那么使用它本身并没有什么问题,但是如果对于你正在解决的任何问题有更好的解决方案,那么你应该避免使用typeid更好的解决方案.

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

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