编译时字符串哈希
问题:是否可以使用 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中文网其他相关文章!