Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengelakkan Segfault Apabila Menggunakan Penghurai Roh dengan Pembolehubah `auto`?

Bagaimanakah Saya Boleh Mengelakkan Segfault Apabila Menggunakan Penghurai Roh dengan Pembolehubah `auto`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-05 21:53:151028semak imbas

How Can I Avoid Segfaults When Using Spirit Parsers with `auto` Variables?

Mengelakkan Segfault Apabila Menetapkan Penghurai kepada Pembolehubah Auto dalam Spirit

Penghurai semangat tidak direka bentuk secara semulajadi untuk digunakan dengan pembolehubah auto dalam Spirit V2. Ini disebabkan oleh templat ungkapan Proto yang mendasari mengekalkan rujukan kepada sementara.

Menggunakan auto bersama-sama dengan penghurai dalam ungkapan qi::parse() sebaris menghasilkan penghuraian yang berjaya. Walau bagaimanapun, memberikan parser kepada pembolehubah auto dan kemudian menggunakannya dalam qi::parse() membawa kepada segfault.

Untuk memintas pengehadan ini, pertimbangkan alternatif berikut:

  • qi::copy(): Tersedia dalam batang Spirit V2 (boost_1_55_0 dan kemudian), qi::copy() boleh mencipta salinan dalam penghurai.
  • boost::proto::deep_copy: Fungsi ini membolehkan penyalinan mendalam bagi ungkapan Proto.
  • BOOST_SPIRIT_AUTO: Makro ini, yang diperkenalkan dalam forum perbincangan Spirit V2, menyediakan cara untuk bekerja dengan penghurai dalam pembolehubah auto.

Untuk butiran dan contoh lanjut, lihat sumber berikut:

  • [Pepijat qi Roh V2 yang dikaitkan dengan pengoptimuman level](https://stackoverflow.com/questions/12011946/spirit-v2-qi-bug-associated-with-optimization-level)
  • [Penghurai Roh X3 dalam pembolehubah automatik](https:// stackoverflow.com/questions/27979404/spirit-x3-parser-within-auto-variable)

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Segfault Apabila Menggunakan Penghurai Roh dengan Pembolehubah `auto`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn