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!