类型id(T) 是在运行时还是在编译时被计算

Does typeid(T) get evaluated at run time or compile time?

本文关键字:编译 计算 运行时 id 类型      更新时间:2023-10-16

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

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

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

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

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


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

正如我在评论中提到的,关于 cpp 参考typeid()的"注释"部分说:

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