Kompilasi Rentetan Rentetan Masa
Soalan: Adakah mungkin untuk mengira cincang rentetan pada masa penyusunan menggunakan C 11 rentetan baharu literals?
Jawapan: Ya, mungkin.
Pengendali yang kelihatan seperti belum diseragamkan lagi, tetapi ia mungkin menyerupai std::hash(value ) atau meta_hash<"string"_meta>::value.
Pelaksanaan:
Pelaksanaan terbaru telah dibangunkan untuk GCC menggunakan constexpr untuk mencipta fungsi CRC32 masa kompilasi. Pelaksanaan ini melibatkan mencipta jadual CRC32 dan menggunakan fungsi templat rekursif untuk mengira cincang.
Contoh:
// 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)
Menggunakan makro ini, anda boleh mengira kompilasi -masa CRC32 cincangan a rentetan:
enum TestEnum { CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"), };
Nota: Pelaksanaan ini hanya berfungsi dengan GCC dan bukan pengkompil MSVC atau Intel.
Atas ialah kandungan terperinci Bolehkah C 11 Compile-Time String Hashing Dicapai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!