C++中赋值运算符的返回类型

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”?

Ast*_*ngs 5

返回类型不具有A&; 标准只说:

用户声明的拷贝赋值运算符X?::?operator=是类的非静态的非模板成员函数X与类型的只有一个参数XX&const X&volatile X&,或const volatile X&

我们按照惯例这样做。

经常被引用的论点是,您可以“链接”赋值 ( a = b = c),但老实说,这并不是一种常见的模式。我认为它在某种程度上是货物崇拜编程,但它不会伤害任何人,并且具有一致性很好。

缺点是大多数人甚至不使用这种返回类型,有时它的实际原因可能会丢失(根据这个问题!)。

我们不返回 an A,因为按被操作对象的值返回(即返回一个 _copy)反而更没用,并且会混淆赋值运算符的目的,即不是创建一个新的A