編譯時字串雜湊
問題:是否可以使用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中文網其他相關文章!