增强灵气 - 使用基于流的解析复制最后一个字母

Boost Spirit Qi - Duplicate last letter with stream-based parsing

本文关键字:复制 最后一个 于流 增强      更新时间:2023-10-16
这可能

非常明显,但为什么 boost 中基于流的解析会复制最后一个字母?我一定做错了什么:

#include <iostream>
#include <sstream>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main() {
    std::string input = "hello";
    std::stringstream ss(input);
    std::string r1, r2;
    boost::spirit::istream_iterator first(ss), last;
    qi::phrase_parse(input.begin(), input.end(), qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r1);
    std::cout << r1 << std::endl; // prints "hello"
    qi::phrase_parse(first, last, qi::lexeme[qi::alpha >> *qi::alnum], qi::space, r2);
    std::cout << r2 << std::endl; // prints "helloo"
}

使用 XCode 5.0 和 Boost 1.54.0 进行测试。

编辑:这个问题似乎是libc++特有的。有人使用Clang护理来确认吗?

如果我理解正确,你不应该使用输入迭代器,因为它们可能会给回溯带来问题。也许这只是纯粹的运气/实现的差异,这有时根本有效。