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

Wat*_*oto 6 c++ templates rtti

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

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

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

mol*_*ilo 8

由于typeid被施加到一个类型,而不是一个对象,存在没有运行时类型的信息,从而使开销将不会是一个问题.

在另一方面:据我所看到的,使得标准时,将确定的值就没有任何要求,所以没有保证,有没有运行时开销.


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


piw*_*iwi 6

正如我在评论中提到,关于"注意事项"部分typeid()CPP引用说:

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