運行以下代碼會導致崩潰。爲什麼?boost :: spirit :: multi_pass帶謂詞和替代的崩潰
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>
using namespace boost::spirit;
typedef multi_pass<
std::string::const_iterator,
iterator_policies::default_policy<
iterator_policies::first_owner,
iterator_policies::no_check,
iterator_policies::buffering_input_iterator,
iterator_policies::split_std_deque>>
string_mp_iterator;
int main() {
std::string input = "234";
string_mp_iterator input_begin(input.begin()),
input_end((string_mp_iterator()));
qi::rule<string_mp_iterator, boost::variant<int, double>()> r =
&qi::lit('1') >> qi::int_ | qi::double_;
qi::parse(input_begin, input_end, r);
return 0;
}
要重現我似乎需要同時具有謂詞和隨後的替代方案中,可以使用迭代multi_pass
碰撞,以及用於將輸入到未滿足謂詞。
我覺得我在這裏錯誤地使用multi_pass
,但我沒有看到問題是什麼。
您是否試圖可靠地解析雙打和整數?搜索https://stackoverflow.com/search?q=strict_real_policies – sehe
不,這只是一個例子,我試圖讓事情儘可能簡單。這在其他地方仍然有用。謝謝! –
這就是未定義行爲的本質:你不能推理它,因爲結果沒有被定義 – sehe