sha*_*vey 5 c++ templates constexpr c++11
我是否认为只应在编译时评估此函数,或者是否存在运行时成本?
template <typename T>
size_t constexpr CompID() {
return typeid(T).hash_code();
}
struct Foo {};
int main(int argc, const char * argv[]) {
size_t foo = CompID<Foo>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
constexpr函数允许在编译时评估函数,但不需要,所以你的答案是"也许".这取决于编译器的优化设置.
§7.1.5[dcl.constexpr]/7
对
constexpr函数的调用产生与constexpr在所有方面调用等效非函数相同的结果,除了对constexpr函数的调用可以出现在常量表达式中.
如果您希望没有运行时成本,可以通过将其分配给constexpr变量来强制进行编译时评估,例如
constexpr auto foo = CompID<Foo>();
Run Code Online (Sandbox Code Playgroud)
另请注意,type_info.hash_code() 无法在编译时进行求值(它不是constexpr函数,§18.7.1[type.info]/7).所以你的代码实际上是错的.
| 归档时间: |
|
| 查看次数: |
1683 次 |
| 最近记录: |