Déclaration de chaînes au moment de la compilation Concisley en C
Introduction
En C, déclaration de chaînes au moment de la compilation , qui restent constants tout au long de la compilation, peuvent s'avérer fastidieux. Les approches traditionnelles nécessitent de spécifier une séquence variadique de caractères :
using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'>;
Approches existantes : défis et limites
Idéalement, déclarer des chaînes au moment de la compilation devrait être plus simple, comme :
using str1 = sequence<"Hello, world!">; constexpr auto str2 = "Hello, world!"_s;
Cependant, ces approches se heurtent obstacles :
Solution : bibliothèque str_const
Dès la présentation de Scott Schurr à C Now 2012, la bibliothèque str_const offre une solution pratique :
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");
Cette solution offre des avantages tels que la vérification de la plage constexpr et la récupération flexible des sous-chaînes, sans avoir besoin de macros.
Mise à jour : C 17 et std::string_view
En C 17, std::string_view propose une solution similaire :
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");
Cette approche offre les avantages suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!