从函数“operator=”返回有什么区别
by reference
by value
?在下面的示例中,两个版本似乎都产生了正确的结果。
#include <iostream>
using namespace std;
class CComplexNumber{
float m_realPart;
float m_imagPart;
public:
CComplexNumber(float r,float i):m_realPart(r),m_imagPart(i){}
//the following can be also
//CComplexNumber& operator=(const CComplexNumber& orig){
CComplexNumber operator=(const CComplexNumber& orig){
if (this!=&orig){
this->m_realPart=orig.m_realPart;
this->m_imagPart=orig.m_imagPart;
}
return *this;
}
friend ostream& operator<<(ostream& lhs,CComplexNumber rhs){
lhs<<"["<<rhs.m_realPart<<","<<rhs.m_imagPart<<"]"<<endl;
}
};
int main() {
CComplexNumber a(1,2);
CComplexNumber b(3,4);
CComplexNumber c(5,6);
a=b=c;
cout<<a<<b<<c;
return 0;
}
最佳答案
按值返回将返回对象的 拷贝 。通过引用返回返回对象本身。
您想使用哪一个取决于您想如何使用返回的值。如果要修改而不影响原对象(返回后),按值返回;否则按引用返回。
使用 operator= 成员函数时的约定是通过引用返回。这允许您在对象上链接操作:
CComplexNumber a(1,2);
CComplexNumber b(3,4);
(a = b) *= 2; //Assignment of b to a, then scale by 2
现在,在赋值后按值返回,
*=
不会修改值 a
,因为 a 的 拷贝 将被缩放 2。通过引用返回, b
将被分配给 a
并且 a
本身将被缩放2.关于c++ - operator= 的返回类型 - 引用还是值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17953279/