Utilisation de std::string dans les expressions constantes
Les variables Constexpr sont un composant crucial du C moderne, offrant une résolution au moment de la compilation pour les expressions complexes . Cependant, en raison de leurs exigences strictes, l'utilisation de std::string dans des contextes constexpr a toujours été problématique.
En C 11, les tentatives de définition d'une constante std::string, comme illustré dans l'extrait de code fourni, aboutissent dans les erreurs de compilation. L'explication réside dans le destructeur non trivial de std::string, qui l'empêche d'être considéré comme un type littéral.
Solutions C 20 et C 17
Heureusement , la C 20 a introduit une solution à ce dilemme. Si la std::string est assurée d'être détruite avant la fin de l'évaluation constante, son utilisation devient valide dans constexpr. Bien que l'exemple de la requête d'origine reste invalide, le code tel que la détermination de la taille d'une std::string créée à partir d'une chaîne littérale non constante (comme illustré dans la réponse) se compile avec succès.
En plus de C Améliorations des années 20, C 17 a présenté std::string_view. Cet objet de type chaîne fournit une référence immuable aux séquences de caractères existantes sans les posséder ni les modifier. La définition d'un constexpr std::string_view, comme démontré dans la réponse, résout le problème de l'utilisation de chaînes de caractères dans des expressions constantes.
Grâce à ces solutions, C 20 et C 17 améliorent considérablement l'expressivité et la puissance de constexpr dans programmation C moderne.
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!