Maison >développement back-end >C++ >Les variables constexpr peuvent-elles contenir des chaînes en 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!