Maison > développement back-end > C++ > Le hachage de chaînes au moment de la compilation C 11 peut-il être réalisé ?

Le hachage de chaînes au moment de la compilation C 11 peut-il être réalisé ?

Linda Hamilton
Libérer: 2024-12-04 01:05:13
original
714 Les gens l'ont consulté

Can C  11 Compile-Time String Hashing Be Achieved?

Hachage de chaîne au moment de la compilation

Question : Est-il possible de calculer le hachage d'une chaîne au moment de la compilation à l'aide de C 11 de nouveaux littéraux de chaîne ?

Réponse : Oui, c'est possible.

L'opérateur auquel cela ressemblerait n'a pas encore été standardisé, mais il pourrait ressembler à std::hash(value) ou meta_hash<"string"_meta>::value.

Implémentation :

Une implémentation récente a été développée pour GCC en utilisant constexpr pour créer un fonction CRC32 au moment de la compilation. Cette implémentation implique la création d'une table CRC32 et l'utilisation d'une fonction de modèle récursive pour calculer le hachage.

Exemple :

// 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)
Copier après la connexion

En utilisant cette macro, vous pouvez calculer une compilation -time CRC32 hachage d'une chaîne :

enum TestEnum
{
    CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"),
};
Copier après la connexion

Remarque : Cette implémentation ne fonctionne qu'avec les compilateurs GCC et non MSVC ou Intel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal