Rumah > pembangunan bahagian belakang > C++ > Bolehkah C 11 String Literals Digunakan untuk Compile-Time String Hashing?

Bolehkah C 11 String Literals Digunakan untuk Compile-Time String Hashing?

Linda Hamilton
Lepaskan: 2024-12-03 03:17:10
asal
710 orang telah melayarinya

Can C  11 String Literals Be Used for Compile-Time String Hashing?

Kompilasi Rentetan Rentetan Masa Menggunakan C 11 Rentetan Literal

Soalan:

Adakah mungkin untuk mengira cincang rentetan pada masa penyusunan menggunakan rentetan baharu C 11 literals?

Jawapan:

Ya, ia mungkin, tetapi memerlukan berhati-hati, kerana ia mungkin tidak berfungsi dengan semua penyusun.

Operator:

Operator untuk pencincangan rentetan masa kompilasi tidak ditakrifkan secara eksplisit. Sebaliknya, ungkapan malar dijana menggunakan fungsi cincang masa kompilasi yang mengambil rentetan literal sebagai input.

Kes Penggunaan:

Satu kes penggunaan yang berpotensi adalah untuk mencipta pernyataan suis yang boleh melakukan tindakan berbeza berdasarkan cincang rentetan:

void foo(const std::string& value)
{
   switch(std::hash<value>())
   {
      case "one"_hash: one(); break;
      case "two"_hash: two(); break;
      default: other(); break;
   }
}
Salin selepas log masuk

Contoh Pelaksanaan:

Berikut ialah contoh pelaksanaan menggunakan fungsi constexpr:

template<size_t idx>
constexpr uint32_t crc32(const char * str)
{
    // Compile-time CRC32 implementation
    return (crc32<idx-1>(str) >> 8) ^ crc_table[(crc32<idx-1>(str) ^ str[idx]) & 0x000000FF];
}

template<>
constexpr uint32_t crc32<size_t(-1)>(const char * str)
{
    // Stop recursion
    return 0xFFFFFFFF;
}

#define COMPILE_TIME_CRC32_STR(x) (crc32<sizeof(x) - 2>(x) ^ 0xFFFFFFFF)
Salin selepas log masuk

Fungsi ini boleh digunakan seperti berikut:

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

Dalam contoh ini , CrcVal01 akan dinilai kepada cincang masa kompilasi rentetan "timbunan-limpahan."

Atas ialah kandungan terperinci Bolehkah C 11 String Literals Digunakan untuk Compile-Time String Hashing?. 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