gpt4 book ai didi

c++ - 运算符重载 C++ 中返回引用与不返回引用有什么区别

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:17 25 4
gpt4 key购买 nike

我试图弄清楚 & 在返回类型上的用途是什么。我的意思是,考虑下面的代码,如果我从运算符重载函数中删除 & 会发生什么。

    class Container
{


public:
int numElems;
int *data;


Container(int n):numElems(n){data=new int [numElems];}
Container & operator=(const Container &rhs)
{
if(this!=&rhs)
{
if(data!=NULL)
delete [] data;
numElems=rhs.numElems;
data=new int [numElems];
for (int i=0;i<numElems;i++)
{
data[i]=rhs.data[i];
}
return *this;
}
}

};

我删除它并编译它,它编译没有任何错误。实际上,对于一个示例 main,它在两种情况下给出了相同的结果:

int main()
{
Container a(3);
Container b(5);
Container c(1);
cout<<a.numElems<<endl;
cout<<b.numElems<<endl;
cout<<c.numElems<<endl;
a=b=c;
cout<<a.numElems<<endl;
cout<<b.numElems<<endl;
cout<<c.numElems<<endl;
return 0;
}

那么,有没有人可以帮助我了解左侧 & 的用途?提前致谢。

最佳答案

class foo {

public:

int val;

foo() { }
foo(int val) : val(val) { }

foo& operator=(const foo &rhs) {
val = rhs.val;
return *this;
}

foo& operator++() {
val++;
return *this;
}

};


void main() {
foo f1(10), f2;
(f2 = f1)++;
std::cout << f1.val << " " << f2.val << std::endl;
}

输出:

10 11

删除引用时的输出:

10 10

关于c++ - 运算符重载 C++ 中返回引用与不返回引用有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405390/

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