类型id(T) 是在运行时还是在编译时被计算
Does typeid(T) get evaluated at run time or compile time?
我在任何地方都找不到这个看似简单的问题的答案。
以下C++函数是否使用 RTTI? 当然不必,但我想知道是否可以保证在编译时确定 typeid。
template <typename T>
const char *getName()
{
return typeid(T).name(); // Resolved at compile time?
}
由于typeid
应用于类型而不是对象,因此没有运行时类型信息,因此开销不会成为问题。
另一方面:据我所知,该标准对何时确定值没有要求,因此不能保证没有运行时开销。
编辑:
当然,(可能)没有保证的事实并不意味着这不是一个合理的假设。
我无法想象有人会编写一个在编译时不计算typeid(T)
的编译器。
正如我在评论中提到的,关于 cpp 参考typeid()
的"注释"部分说:
当应用于多态类型的表达式时,typeid 表达式的计算可能涉及运行时开销(虚拟表查找),否则在编译时解析 typeid 表达式。
相关文章:
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- C++ 在编译时具有函数计算全局变量
- 如何在常量计算表达式中获取编译时错误?
- 如何判断是否在编译时计算了"constexpr"(无需手动检查)
- 在编译时何时计算范围::视图?
- C++编译器能在编译时计算出文字的除法结果吗
- 在编译时计算"if"子句
- 根据计算机上安装的库依赖项编译不同的代码
- 强制在编译时计算类的类的常量成员
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 在编译时计算基类的偏移量
- C++ constexpr:在编译时计算标准数组
- 如何判断表达式是在编译时还是运行时计算的?
- 计算对数组编译时中对元素的差异
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- Clang 在编译时不会计算非 constexpr 变量的 constexpr 函数的值
- C++:当与 std::cout 一起使用时,constexpr 函数在编译时不会计算
- 如何避免由于编译时计算的值而导致"unreachable statement"?
- C++ 计算编译时常量,同时防止整数常量溢出
- 从捕获 constexpr 函数返回值的变量中删除 constexpr 会删除编译时计算