gpt4 book ai didi

c++ - operator= 的返回类型 - 引用还是值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:51 26 4
gpt4 key购买 nike

从函数“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com