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
714 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!

sumber:php.cn
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