为什么不完善转发(全能)工作来实现副本分配?

时间:2017-11-13 20:56:01

标签: c++ perfect-forwarding copy-assignment

在具有一系列ctors(其中大多数只有一个参数)的类中,我希望所有单参数ctors也可以通过相应的赋值运算符进行镜像。 ctors包括但不限于copy-ctor和move-ctor。所以这应该满足五条规则。

  template <typename T>
  object& operator=(T&& from) {
    // ...
    return *this;
  }

这是一个最小的例子:https://ideone.com/OKprcr(感谢@Daniel H指出constness)。

我得到的错误是

error: object of type 'object' cannot be assigned because its copy assignment operator is implicitly deleted
...
note: copy assignment operator is implicitly deleted because 'object' has a user-declared move constructor

为什么功能模板没有实现复制赋值运算符?

1 个答案:

答案 0 :(得分:2)

  

为什么函数模板不能实现复制赋值运算符?

因为标准是这样说的([class.copy.assign] / 1):

  

用户声明的复制赋值运算符X::operator=是非静态非模板成员函数   类X只有一个类型为XX&const X&volatile X&const volatile X&的参数。

注意那里没有X&&