Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost Spirit Qi-使用基于流的解析复制最后一个字母_C++_Boost_Boost Spirit_Libc++ - Fatal编程技术网

C++ Boost Spirit Qi-使用基于流的解析复制最后一个字母

C++ Boost Spirit Qi-使用基于流的解析复制最后一个字母,c++,boost,boost-spirit,libc++,C++,Boost,Boost Spirit,Libc++,这可能非常明显,但为什么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(

这可能非常明显,但为什么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"
}
#包括
#包括
#包括
名称空间qi=boost::spirit::qi;
int main(){
std::string input=“hello”;
std::stringstream ss(输入);
std::字符串r1,r2;
boost::spirit::istream_迭代器第一(ss),最后;
qi::phrase_parse(input.begin(),input.end(),qi::lexeme[qi::alpha>>*qi::alnum],qi::space,r1);
std::cout*qi::alnum],qi::space,r2);

std::cout如果我理解正确的话,因为它们可能会给回溯带来问题。也许这只是运气好/实现上的差异,有时会奏效。

您的代码会打印两次“hello”在我的系统上,Mingw,GCC 4.8-1,提高了4.4.0,谢谢你的测试。我会尝试其他几种配置……好吧,这取决于我是否选择了LBC++(不正确的输出)或LIbSTDC++ +(正确的输出)。这很奇怪…非常有趣。优秀的重放器。列表Visual Studio 2013 RC也没有问题。它必须特定于clang/libc++,否则我的系统中的某些东西确实不可靠。我已经发布到邮件列表中,希望其他人可以测试它……很好,但该示例已经使用了一个
boost::spirit::istream_迭代器
,根据我的理解应该是工作。看这里:。@kloffy:你说得对,我完全忽略了它之前的boost::spirit::。