1
13
答案取决于你所指的精神的版本。 classic(前spirit v1.x)为规则实现特殊的复制语义。文件上说:
赋值运算符基本上引用了rhs规则,而不创建深度副本。这样做是为了允许:
但结果证明这是非常混乱的,因为它阻止了以与“普通”对象相同的方式处理规则。
因为这个原因,有一个成员函数
同时:
显然是错的。
在spirit.qi(即spirit v2.x)中,行为部分改变。当在解析器外部处理规则时,规则现在的行为与预期一致。您可以将它们通常存储在容器中(赋值运算符公开预期的行为)。但是要注意,解析器表达式中的规则仍然由引用持有,它仍然允许以与以前相同的方式引用规则:
有时需要对规则进行深度复制,因此仍然有成员函数
更改后的复制语义还有另一个副作用。构造如下:
正在创建
在任何情况下,在两个版本的spirit中,如果从解析器表达式引用的部分规则超出范围,那么最终都会出现悬空引用。
顺便说一句,两个spirit版本都不实现函数
|
Pablo · 在一个单过程解析器中有几个匹配项? 6 年前 |
Aleph0 · 切换到更高版本的Boost 1.6.1时出现编译错误 6 年前 |
sofname · 升压::精神::气和升压::凤凰::推回 6 年前 |
Markus · 无需跳绳就能提高精神分析能力 6 年前 |
Jean-Michaël Celerier · 精神上的递归规则。X3 7 年前 |
Filippo · Boost Spirit x3:解析为结构 7 年前 |