Rumah > pembangunan bahagian belakang > C++ > Bolehkah C 11 Compile-Time String Hashing Dicapai?

Bolehkah C 11 Compile-Time String Hashing Dicapai?

Linda Hamilton
Lepaskan: 2024-12-04 01:05:13
asal
744 orang telah melayarinya

Can C  11 Compile-Time String Hashing Be Achieved?

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)
Salin selepas log masuk

Menggunakan makro ini, anda boleh mengira kompilasi -masa CRC32 cincangan a rentetan:

enum TestEnum
{
    CrcVal01 = COMPILE_TIME_CRC32_STR("stack-overflow"),
};
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan