7

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

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

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

2 回答 2

8

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

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


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

于 2013-09-13T09:17:32.137 回答
7

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

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

于 2013-09-13T09:14:57.993 回答