首页 >后端开发 >C++ >C 11 编译时字符串哈希可以实现吗?

C 11 编译时字符串哈希可以实现吗?

Linda Hamilton
Linda Hamilton原创
2024-12-04 01:05:13675浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn