是否在运行时或编译时评估了typeid(T)?

时间:2013-09-13 08:37:06

标签: c++ templates rtti

我无法在任何地方找到这个看似简单的问题的答案。

以下C ++函数是否使用RTTI?它当然不必,但我想知道是否有保证在编译时确定typeid。

template <typename T>
const char *getName()
{
   return typeid(T).name();   // Resolved at compile time?
}

2 个答案:

答案 0 :(得分:8)

由于typeid应用于类型而不是对象,因此 没有运行时类型信息,因此开销不会成为问题。

另一方面:据我所知,标准对于何时确定值没有要求,因此无法保证没有运行时开销。


编辑:
当然,(可能)没有保证的事实并不意味着它不是一个合理的假设 我无法想象有人会在编译时编写没有评估typeid(T)的编译器。

答案 1 :(得分:6)

正如我在评论中提到的,关于cpp referencetypeid()的“备注”部分说:

  

当应用于多态类型的表达式时,对typeid表达式的求值可能涉及运行时开销(虚拟表查找),否则在编译时解析typeid表达式。