Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengisytiharkan Rentetan Masa Kompilasi dengan Ringkas dalam C ?
Mengisytiharkan Rentetan Masa Kompilasi Concisley dalam C
Pengenalan
Dalam C , mengisytiharkan rentetan masa kompilasi , yang kekal malar sepanjang penyusunan, boleh menyusahkan. Pendekatan tradisional memerlukan penentuan urutan aksara yang variadik:
using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>;
Pendekatan Sedia Ada: Cabaran dan Had
Sebaik-baiknya, mengisytiharkan rentetan masa kompilasi hendaklah lebih mudah, seperti:
using str1 = sequence<"Hello, world!">; constexpr auto str2 = "Hello, world!"_s;
Walau bagaimanapun, pendekatan ini dihadapi halangan:
Penyelesaian: str_const Library
Sehingga pembentangan Scott Schurr di C Now 2012, perpustakaan str_const menawarkan penyelesaian yang mudah:
constexpr str_const my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr str_const world(my_string, 7, 5); static_assert(world == "world");
Penyelesaian ini memberikan faedah seperti pemeriksaan julat constexpr dan pengambilan subrentetan yang fleksibel, tanpa memerlukan makro.
Kemas kini: C 17 dan std::string_view
Dalam C 17, std::string_view menawarkan penyelesaian yang serupa:
constexpr std::string_view my_string = "Hello, world!"; static_assert(my_string.size() == 13); static_assert(my_string[4] == 'o'); constexpr std::string_view world(my_string.substr(7, 5)); static_assert(world == "world");
Pendekatan ini memberikan kelebihan berikut:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengisytiharkan Rentetan Masa Kompilasi dengan Ringkas dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!