Home > Backend Development > C++ > Can C 11 Compile-Time String Hashing Be Achieved?

Can C 11 Compile-Time String Hashing Be Achieved?

Linda Hamilton
Release: 2024-12-04 01:05:13
Original
683 people have browsed it

Can C  11 Compile-Time String Hashing Be Achieved?

Compile Time String Hashing

Question: Is it possible to compute a string's hash at compile time using C 11's new string literals?

Answer: Yes, it is possible.

The operator that would look like has not been standardized yet, but it could resemble std::hash(value) or meta_hash<"string"_meta>::value.

Implementation:

A recent implementation has been developed for GCC using constexpr to create a compile-time CRC32 function. This implementation involves creating a CRC32 table and using a recursive template function to calculate the hash.

Example:

// 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)
Copy after login

Using this macro, you can compute a compile-time CRC32 hash of a string:

enum TestEnum
{
    CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"),
};
Copy after login

Note: This implementation only works with GCC and not MSVC or Intel compilers.

The above is the detailed content of Can C 11 Compile-Time String Hashing Be Achieved?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template