Maison > développement back-end > C++ > Pourquoi les analyseurs Spirit V2 plantent-ils lorsqu'ils sont attribués à des variables « auto » ?

Pourquoi les analyseurs Spirit V2 plantent-ils lorsqu'ils sont attribués à des variables « auto » ?

Patricia Arquette
Libérer: 2024-11-21 11:11:10
original
360 Les gens l'ont consulté

Why Do Spirit V2 Parsers Crash When Assigned to `auto` Variables?

Attribution d'analyseurs aux variables automatiques : faiblesse cachée de Spirit V2

Les analyseurs Spirit dans Spirit V2 ne sont pas destinés à être utilisés avec le mot-clé auto. Lorsque vous tentez d'attribuer un analyseur à une variable automatique, le programme peut planter avec une erreur de segmentation.

Ce problème survient parce que les modèles d'expression Proto sous-jacents de Spirit contiennent des références à des temporaires. Pour contourner cette limitation, vous pouvez utiliser les méthodes suivantes :

  • qi::copy() : disponible dans le coffre Boost V2 mais pas encore publié. Copie l'analyseur, créant un nouvel objet.
  • boost::proto::deep_copy : effectue une copie complète de l'analyseur, résolvant toutes les références aux temporaires.
  • BOOST_SPIRIT_AUTO : Une macro définie comme boost::proto::wrap().

Pour plus d'informations, reportez-vous à la discussion StackOverflow sur https://stackoverflow.com/search?q=user:85371 deep_copy.

Remarque : Cette limitation n'existe pas dans Boost Spirit X3, qui a une architecture plus 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!

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