gpt4 book ai didi

c++ - constexpr 和 RTTI

转载 作者:行者123 更新时间:2023-12-01 08:58:31 25 4
gpt4 key购买 nike

我想做这样的事情:

template <typename T>
constexpr ::std::size_t type_name_hash()
{
return ::std::hash<::std::string>()(typeid(T).name());
}

现在,我都不知道 hash也不是 stringconstexpr ,但这可以解决,假设它们是 constexpr .我想问的是,如果 RTTI已开启,应该是 constexpr函数计算 typeid(T).name() 的哈希值仍然产生编译时常量?什么时候 RTTI怎么样是关闭的?

最佳答案

typeid(type-id) 和 typeid(expr) 都可以用在常量表达式中,除非(如前所述)expr 的结果是多态类类型的泛左值。

然而,因为没有 type_info的标准成员(member)为constexpr (包括 hash_code() 方法),除了获取它的地址之外,你不能对该对象做任何事情。标准中甚至没有保证对象已初始化。甚至获取地址也几乎没有用,因为不能保证 typeid() 在与相同类型一起使用时具有相同的结果。例如。以下断言可能会失败:

static_assert(&typeid(int) == &typeid(int), "Multiple type_infos for int");

这是一个人为的例子,但它并非闻所未闻 typeid(T)对相同的 T 产生不同的结果在一个程序中使用的多个共享库中,甚至可能在不同的翻译单元中。

关于c++ - constexpr 和 RTTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930319/

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