我在任何地方都找不到这个看似简单的问题的答案。
以下 C++ 函数是否使用 RTTI?当然不必,但我想知道是否可以保证 typeid 将在编译时确定。
template <typename T>
const char *getName()
{
return typeid(T).name(); // Resolved at compile time?
}
由于typeid
应用于类型而不是对象,因此没有运行时类型信息,因此开销不会成为问题。
另一方面:据我所知,该标准对何时确定该值没有任何要求,因此不能保证没有运行时开销。
编辑:
当然,(可能)没有保证这一事实并不意味着这不是一个合理的假设。
我无法想象有人会编写一个在编译时不评估typeid(T)
的编译器。
typeid()
正如我在评论中提到的,关于cpp 参考的“注释”部分说:
当应用于多态类型的表达式时,typeid 表达式的评估可能涉及运行时开销(虚拟表查找),否则 typeid 表达式在编译时被解析。