我正在使用std::hash<std::string>()
为C ++中的字符串创建哈希码。该函数返回long double
,但由于继承原因,我需要uint64_t
。
这样的演员安全吗?
答案 0 :(得分:3)
std::hash
调用运算符返回类型size_t
的值,表示参数的哈希值。
因此,关于long double
返回类型的问题的假设似乎是不正确的。
答案 1 :(得分:1)
C ++标准第3.9.1.8段说:
有三种浮点类型:float,double和long double。 double类型提供至少与float一样多的精度,long double类型提供至少与double一样多的精度。 float类型的值集是double类型的值集的子集; double类型的值集是long double类型的值集的子集。浮点类型的值表示是实现定义的。积分和浮动类型统称为算术类型。标准模板std :: numeric_limits(18.3)的特化应指定实现的每种算术类型的最大值和最小值。
这几乎只说long double类型应该比float类型更长。
在实践中,长双倍通常为80到128位宽,如下所述:http://en.cppreference.com/w/cpp/language/types
这使得(我假设reinterpret_cast)对uint64_t不安全,因为long double中的一些位可能不适合。