Luc*_*tas 0 c++ operator-overloading assignment-operator
想象我有一个这样的课程:
public:
A(const int a);
A& operator = (const A&);
};
Run Code Online (Sandbox Code Playgroud)
为什么“=”运算符的返回类型必须是“A&”而不是简单的“A”?
返回类型不具有可A&; 标准只说:
用户声明的拷贝赋值运算符
X?::?operator=是类的非静态的非模板成员函数X与类型的只有一个参数X,X&,const X&,volatile X&,或const volatile X&。
我们按照惯例这样做。
经常被引用的论点是,您可以“链接”赋值 ( a = b = c),但老实说,这并不是一种常见的模式。我认为它在某种程度上是货物崇拜编程,但它不会伤害任何人,并且具有一致性很好。
缺点是大多数人甚至不使用这种返回类型,有时它的实际原因可能会丢失(根据这个问题!)。
我们不返回 an A,因为按被操作对象的值返回(即返回一个 _copy)反而更没用,并且会混淆赋值运算符的目的,即不是创建一个新的A。