拷贝赋值运算符 为啥非要返回个引用

2019-11-30 17:08:48 +08:00
 peiqing9003ah

最近学 C++, 拷贝赋值运算符 返回值完全可以是空。

代码如下, 我总结这只是个函数调用, 没有返回值一般没啥特别的鸟问题。

using namespace std;

class A { public : int Aa; int Ab; public: A(int i, int k):Aa(i), Ab(k) {

}
A & operator ==(const A& rhs)
{
	cout << "这儿有一句傻逼代码" << endl;
	return *this;
}
A &  operator >=(const A& rhs)
{
	cout << "这儿有另外一句傻逼代码" << endl;
	Aa = rhs.Aa;
	Ab = rhs.Ab;
	return *this;
}
void  operator =(const A& rhs)
{
	cout << "这儿有一个拷贝赋值的傻逼代码" << endl;
	Aa = rhs.Aa;
	Ab = rhs.Ab;
	//return *this;
}

}; int main() { std::cout << "Hello World!\n"; A *p1 = new A(1, 3); A *p = new A(2, 3);

A b(331,332);
cout << "B" << b.Aa << endl;
cout << "B" << b.Ab << endl;
 b = *p;
cout << "B"<<b.Aa << endl;
cout << "B"<<b.Ab << endl;

}

为啥 我看人家开源项目中的拷贝赋值运算符, 一般都非要返回个引用 有老铁总结下这块吗?

3250 次点击
所在节点    C++
5 条回复
ifanze
2019-11-30 17:13:27 +08:00
```
A a = xxxx;
A b;
A c;
c = b = a;
```
secondwtq
2019-11-30 18:08:59 +08:00
那说明你还需要继续学 C++(或者放弃学 C++)
C++ 就是这样,它不会把用户(开发者)当傻逼,你可以做任何事情,它不会阻止你,但是要想玩的转,你最好知道自己在做什么
可以这样做 不代表 应该这样做
一起努力吧
c0011
2019-11-30 20:38:42 +08:00
这水平就开始看开源代码了?
coray
2019-11-30 21:47:13 +08:00
学 C++不能浮躁...
yulon
2019-12-01 00:03:26 +08:00
因为赋值运算符的语义就是可以连续赋值的,当然你也可以像标准流的输入输出运算符一样,通过魔改位移运算符来实现,这完全取决于你自己的用途。

但是运算符都没学过,就开始玩运算符重载的,也是虎。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624613

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX