&& amp;的优点是什么?在这段代码?

时间:2016-09-16 15:16:43

标签: c++ c++14 universal-reference

在以下代码中,使用%b有什么好处? 代码来自Specialize same operator for different traits

的回答

this问题,我得到一个&&参数意味着它是一个可被函数修改的引用。

&&可能会阻止编译器将对变量的引用解释为数组,如What is std::decay and when it should be used?

decay_t完全转发,如here所述。为什么我们需要这种转发?

感谢。

std::forward

1 个答案:

答案 0 :(得分:2)

实际上,这是一个(让我说)技巧,所以示例代码可以正常工作。
事实上,标准说:

  

用户声明的复制赋值运算符X :: operator =是X类的非静态非模板成员函数,只有一个类型为X,X&,const X&的参数,挥发性X&安培;或const volatileX&安培;

此外:

  

如果类定义没有显式声明一个复制赋值运算符,则会隐式声明一个。

现在,尝试复制 - 为变量分配一个const引用,例如:

Bb = static_cast<const A&>(Aa);

结果将不再是预期的结果。

无论如何,只要您只处理非cv限定的左值/右值引用,答案中使用的转发引用就可以正常工作,如示例代码所示。
拦截一堆特定类型并完成其工作。就是这样。

正如@ Jarod42的评论中提到的那样:

  

请注意,您仍需编写operator=(const A&)来处理它,因为它很特殊。

确实没那么特别。如果您没有定义该代码,则该代码中没有正确的复制赋值运算符 如评论中所述,定义它

  

[...]留给读者练习。 : - )

那么,这样做有什么好处呢? 提供最小化工作解决方案的捷径。当然,这不是完整的,生产就绪的代码。