首頁 > 後端開發 > C++ > C 11 編譯時字串雜湊可以實現嗎?

C 11 編譯時字串雜湊可以實現嗎?

Linda Hamilton
發布: 2024-12-04 01:05:13
原創
707 人瀏覽過

Can C  11 Compile-Time String Hashing Be Achieved?

編譯時字串雜湊

問題:是否可以使用C 11 在編譯時計算字串的哈希新字串文字?

答案:是的,這是可能的。

看起來像的運算子尚未標準化,但它可能類似於std::hash(value ) 或meta_hash::value.

實作:

最近為GCC 開發了一個實現,使用constexpr 建立編譯時CRC32函數。此實作涉及建立 CRC32 表並使用遞歸模板函數來計算雜湊。

範例:

// CRC32 Table (zlib polynomial)
static constexpr uint32_t crc_table[256] = {
    // ...
};

template<size_t idx>
constexpr uint32_t crc32(const char * str)
{
    // ...
}

// ...

#define COMPILE_TIME_CRC32_STR(x) (crc32<sizeof(x) - 2>(x) ^ 0xFFFFFFFF)
登入後複製

使用此宏,您可以計算編譯-a 的時間CRC32 雜湊值字串:

enum TestEnum
{
    CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"),
};
登入後複製

注意:此實作僅適用於GCC,不適用於MSVC 或Intel 編譯器。

以上是C 11 編譯時字串雜湊可以實現嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板