【发布时间】:2011-03-07 13:19:38
【问题描述】:
在 C++ 中,我不清楚从复制赋值运算符返回引用的概念。为什么复制赋值运算符不能返回新对象的副本?另外,如果我有类A,还有以下:
A a1(param);
A a2 = a1;
A a3;
a3 = a2; //<--- this is the problematic line
operator= 定义如下:
A A::operator=(const A& a)
{
if (this == &a)
{
return *this;
}
param = a.param;
return *this;
}
【问题讨论】:
-
没有这个要求。但是如果你想坚持最小惊喜的原则,你会返回
A&,就像a=b是一个引用a的左值表达式,如果a和b是整数。 -
@MattMcNabb 谢谢你让我知道!会这样做
-
为什么我们不能从复制赋值运算符返回
A*我猜链接赋值仍然可以正常工作。如果有的话,任何人都可以帮助了解返回A*的危险。 -
注意:由于 C++11 也有 move-assignment 运算符,因此本问答中的所有相同逻辑也适用于 move-assignment 运算符。事实上,如果声明为
A & operator=(A a);,它们可能都是同一个函数,即按值获取参数。 -
@Krishna_Oza 真正的问题是你为什么要返回一个指针。想想如果我们只有指针,运算符重载和返回的代码会有多丑陋和模棱两可 - 在关键情况下,致命模棱两可(也:致命丑陋)。然后只需阅读语言的创造者自己的话:stackoverflow.com/questions/8007832/…
标签: c++ operator-overloading copy-constructor assignment-operator