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
Patricia Arquetteoriginal
2024-11-21 11:11:10323parcourir

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:
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