ホームページ >バックエンド開発 >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<"string"_meta>::value.

実装:

最近の実装は、constexpr を使用してコンパイル時 CRC32 関数を作成する GCC 用に開発されました。この実装には、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)

このマクロを使用すると、コンパイルを計算できます。 -time CRC32 ハッシュ文字列:

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

注: この実装は GCC でのみ動作し、MSVC や Intel コンパイラでは動作しません。

以上がC 11 コンパイル時の文字列ハッシュは実現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。