在以下代码中,使用%b
有什么好处?
代码来自Specialize same operator for different traits
从this问题,我得到一个&&
参数意味着它是一个可被函数修改的引用。
&&
可能会阻止编译器将对变量的引用解释为数组,如What is std::decay and when it should be used?
decay_t
完全转发,如here所述。为什么我们需要这种转发?
感谢。
std::forward
答案 0 :(得分:2)
实际上,这是一个(让我说)技巧,所以示例代码可以正常工作。
事实上,标准说:
用户声明的复制赋值运算符X :: operator =是X类的非静态非模板成员函数,只有一个类型为X,X&,const X&的参数,挥发性X&安培;或const volatileX&安培;
此外:
如果类定义没有显式声明一个复制赋值运算符,则会隐式声明一个。
现在,尝试复制 - 为变量分配一个const引用,例如:
Bb = static_cast<const A&>(Aa);
结果将不再是预期的结果。
无论如何,只要您只处理非cv限定的左值/右值引用,答案中使用的转发引用就可以正常工作,如示例代码所示。
它拦截一堆特定类型并完成其工作。就是这样。
正如@ Jarod42的评论中提到的那样:
请注意,您仍需编写
operator=(const A&)
来处理它,因为它很特殊。
确实没那么特别。如果您没有定义该代码,则该代码中没有正确的复制赋值运算符 如评论中所述,定义它
[...]留给读者练习。 : - )
那么,这样做有什么好处呢? 提供最小化工作解决方案的捷径。当然,这不是完整的,生产就绪的代码。