在一个具有一系列 ctor 的类中(其中大多数只有一个参数(,我希望所有单参数 ctor 也由相应的赋值运算符镜像。CTOR 包括但不限于复制 ctor 和移动 ctor。所以这个,应该满足五法则。
template <typename T>
object& operator=(T&& from) {
// ...
return *this;
}
这是一个最小的例子:https://ideone.com/OKprcr(感谢@Daniel H指出恒常性(。
我得到的错误是
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
为什么函数模板不实现复制赋值运算符?
为什么函数模板不实现复制赋值运算符?
因为标准是这样说的([class.copy.assign]/1(:
用户声明的复制赋值运算符
X::operator=
是 类X
只有一个类型为X
、X&
、const X&
、volatile X&
或const volatile X&
的参数。
请注意,那里也没有X&&
。