ホームページ >バックエンド開発 >C++ >Spirit パーサーは「auto」変数で使用できますか?

Spirit パーサーは「auto」変数で使用できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-02 04:03:09247ブラウズ

Can Spirit Parsers Be Used with `auto` Variables?

自動変数へのパーサーの割り当て

質問:

Spirit パーサーは auto で使用できますか?

コード スニペット:

auto bracketed_z = '[' >> +qi::char_('z') >> ']';

自動にパーサーを割り当てる場合変数を使用すると、上に示したように、コードはセグメンテーション違反でクラッシュします。ただし、パーサーを qi::parse() インラインに直接渡すと、正常に動作します。

答え:

いいえ、Spirit パーサーは、Spirit V2 の auto で使用することを意図していません。

説明:

基礎となる Proto 式テンプレートは、一時変数への参照を保持します。パーサーを auto 変数に割り当てるとパーサーがコピーされ、その結果、ダングリング参照が発生する可能性があります。

解決策:

この問題を回避するには、次の方法を使用できます。

  • qi::copy() (Boost 後の Boost トランクで利用可能) 1.55.0)
  • boost::proto::deep_copy
  • BOOST_SPIRIT_AUTO

以上がSpirit パーサーは「auto」変数で使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。