Maison > développement back-end > C++ > Comment puis-je déclarer de manière concise des chaînes au moment de la compilation en C ?

Comment puis-je déclarer de manière concise des chaînes au moment de la compilation en C ?

Barbara Streisand
Libérer: 2024-12-10 02:24:10
original
1022 Les gens l'ont consulté

How Can I Concisely Declare Compile-Time Strings in C  ?

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', '!'>;
Copier après la connexion

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;
Copier après la connexion

Cependant, ces approches se heurtent obstacles :

  • L'approche 1 nécessite un tableau avec des liens externes et une implémentation complexe.
  • L'approche 2, utilisant des littéraux définis par l'utilisateur, est difficile en raison de la nature non contextuelle de l'entrée paramètre.
  • Les fonctions Constexpr ne peuvent pas accepter les tableaux non-constexpr comme paramètres.

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");
Copier après la connexion

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");
Copier après la connexion

Cette approche offre les avantages suivants :

  • Pas besoin de bibliothèques personnalisées ou macros.
  • Vérification de plage à l'aide de .at() ou .substr().
  • Peut être utilisé comme type de paramètre const.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal