Maison >développement back-end >C++ >Les variables constexpr peuvent-elles contenir des chaînes en C ?

Les variables constexpr peuvent-elles contenir des chaînes en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 07:35:15429parcourir

Can constexpr Variables Hold Strings in C  ?

Variables constexpr et littéraux de chaîne

En C, les variables constexpr doivent avoir un type littéral, ce qui signifie qu'elles ne peuvent pas contenir d'objets avec des destructeurs non triviaux . Lorsque vous tentez de définir une variable constexpr std::string en C 11, une erreur est rencontrée en raison du destructeur non trivial de std::string.

Alternative pour les littéraux de chaîne constexpr

Depuis C 20, il est possible d'utiliser std::string dans les expressions constexpr sous certaines conditions. Plus précisément, la std::string doit être détruite avant la fin de l'évaluation constante.

Exemple :

constexpr std::size_t n = std::string("hello, world").size();

Dans cet exemple, la std::string sera être détruit dans le cadre de l'expression évaluant la taille, le code est donc valide.

String_View Alternative

Une autre option pour utiliser des objets de type chaîne dans les expressions constexpr consiste à utiliser std::string_view introduit dans C 17.

Exemple :

constexpr std::string_view sv = "hello, world";

std::string_view représente un objet de type chaîne avec un accès immuable et non propriétaire à une séquence sous-jacente de personnages. Il n'a pas de destructeur non trivial, ce qui le rend adapté à une utilisation dans les expressions constexpr.

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!

Déclaration:
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