自動変数へのパーサーの割り当て
Boost Spirit を使用する場合、パーサーを自動変数に割り当てることの影響を理解することが不可欠です。
元のコード スニペットは、パーサーをqi::parse() インラインは機能しますが、auto 変数を介して渡すとセグメンテーション違反が発生します。この明らかな矛盾は、Spirit V2 パーサーの制限により発生します。
Spirit パーサー内の基礎となる Proto 式テンプレートは一時変数への参照を保持しているため、auto 変数に割り当てるときに問題が発生する可能性があります。 auto 変数自体は一時的なものであるため、その存続期間は参照されるパーサーのメモリよりも短くなります。その結果、パーサーの参照を解除すると、セグメンテーション違反などの不特定の動作が発生する可能性があります。
この問題を軽減するために、Boost Spirit V2 はいくつかの解決策を提供します。
代わりに、Boost Spirit X3 はこの制限に対処し、より柔軟なパーサー処理を可能にします。
以上が自動変数を Boost Spirit パーサーと一緒に使用するとセグメンテーション違反が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。