gpt4 book ai didi

编译时的 C++ constexpr

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:48 25 4
gpt4 key购买 nike

我认为这个函数应该只在编译时求值是正确的,还是它有运行时成本?

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;
}

最佳答案

constexpr 函数允许在编译时计算函数,但不要求这样做,所以你的答案是“也许”。这取决于编译器的优化设置。

§7.1.5[dcl.constexpr]/7

A call to a constexpr function produces the same result as a call to an equivalent non-constexpr function in all respects except that a call to a constexpr function can appear in a constant expression.

如果您希望没有运行时成本,您可以通过将其分配给 constexpr 变量来强制进行编译时评估,例如

constexpr auto foo = CompID<Foo>();

另请注意 type_info.hash_code() 无法在编译时求值(它不是 constexpr 函数,§18.7.1[type.info]/7).所以你的代码实际上是错误的。

关于编译时的 C++ constexpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com