簡體   English   中英

安全地將長整型轉換為uint64_t

[英]Safe to cast long double to uint64_t

我正在使用std::hash<std::string>()為C ++中的字符串創建哈希碼。 該函數返回一個long double uint64_t ,但出於繼承原因,我需要一個uint64_t

這樣的演員安全嗎?

std::hash調用運算符返回一個size_t類型的值,該值表示該參數的哈希值。

因此,關於long double返回類型的問題假設似乎是錯誤的。

C ++標准第3.9.1.8段說:

共有三種浮點類型:float,double和long double。 double類型至少提供與float一樣高的精度,long long類型提供至少與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不安全,因為長雙精度數中的某些位可能不合適。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM