可以安全地将long double转换为uint64_t

时间:2014-02-11 16:04:39

标签: c++ casting

我正在使用std::hash<std::string>()为C ++中的字符串创建哈希码。该函数返回long double,但由于继承原因,我需要uint64_t

这样的演员安全吗?

2 个答案:

答案 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中的一些位可能不适合。

相关问题