gpt4 book ai didi

c++ - boost spirit : Difference between operators "%=" and "="

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:18 25 4
gpt4 key购买 nike

我不明白这两个运算符之间的区别。让我们举一个例子,将像 "AA,BB,CC,DD" 这样的输入解析成字符串 vector 。

namespace qi = boost::spirit::qi;
class my_grammar : public qi::grammar<string::const_iterator, string()>
{
public:
my_grammar() : base_type(start) {
using qi::_1;
using qi::char_;
start = *(char_ - qi::lit(','));
}
qi::rule<string::const_iterator, string()> start;
};

据我所知,a %= b 等同于 a = b[_val = _1]。这很清楚。但另一方面,解析器 *(char_ - qi::lit(',')) 具有 std::string 类型的综合属性,匹配顺序将被分配。使用 start = *(char_ - qi::lit(',')) 的结果是一样的。那么使用运算符 %= 是什么情况呢?

最佳答案

好的,我在 boost 文档中找到了它 http://www.boost.org/doc/libs/1_60_0/libs/spirit/doc/html/spirit/qi.html :

 Note
r %= p and r = p are equivalent if there are no semantic actions associated with p.

所以如果 start 规则包含语义 Action ex.

*(char_[boost::phoenix::ref(my_string) = _1] - qi::lit(','))`

然后将运算符更改为 %= 会有所不同。

关于c++ - boost spirit : Difference between operators "%=" and "=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35279500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com