![]() |
1
13
答案取决于你所指的精神的版本。 classic(前spirit v1.x)为规则实现特殊的复制语义。文件上说:
赋值运算符基本上引用了rhs规则,而不创建深度副本。这样做是为了允许:
但结果证明这是非常混乱的,因为它阻止了以与“普通”对象相同的方式处理规则。
因为这个原因,有一个成员函数
同时:
显然是错的。
在spirit.qi(即spirit v2.x)中,行为部分改变。当在解析器外部处理规则时,规则现在的行为与预期一致。您可以将它们通常存储在容器中(赋值运算符公开预期的行为)。但是要注意,解析器表达式中的规则仍然由引用持有,它仍然允许以与以前相同的方式引用规则:
有时需要对规则进行深度复制,因此仍然有成员函数
更改后的复制语义还有另一个副作用。构造如下:
正在创建
在任何情况下,在两个版本的spirit中,如果从解析器表达式引用的部分规则超出范围,那么最终都会出现悬空引用。
顺便说一句,两个spirit版本都不实现函数
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |