Heim >Backend-Entwicklung >C++ >Kann C 11-String-Hashing zur Kompilierungszeit erreicht werden?

Kann C 11-String-Hashing zur Kompilierungszeit erreicht werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-04 01:05:13675Durchsuche

Can C  11 Compile-Time String Hashing Be Achieved?

String-Hashing zur Kompilierungszeit

Frage: Ist es möglich, den Hash eines Strings zur Kompilierzeit mit C 11 zu berechnen? neue String-Literale?

Antwort: Ja, es ist möglich.

Der Operator, der so aussehen würde, wurde noch nicht standardisiert, aber er könnte std::hash(value) oder meta_hash<"string"_meta>::value ähneln.

Implementierung:

Eine aktuelle Implementierung wurde für GCC entwickelt, bei der constexpr zum Erstellen eines verwendet wird CRC32-Funktion zur Kompilierungszeit. Diese Implementierung umfasst das Erstellen einer CRC32-Tabelle und die Verwendung einer rekursiven Vorlagenfunktion zum Berechnen des Hashs.

Beispiel:

// 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)

Mit diesem Makro können Sie eine Kompilierung berechnen -Zeit-CRC32-Hash eines string:

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

Hinweis: Diese Implementierung funktioniert nur mit GCC und nicht mit MSVC- oder Intel-Compilern.

Das obige ist der detaillierte Inhalt vonKann C 11-String-Hashing zur Kompilierungszeit erreicht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn