我知道“+”操作符必须返回一些东西,这对我来说很有意义。
但是我不明白为什么我们在重载“=”运算符时返回一个对象。例如,请查看以下内容:
const Scene& Scene::operator=(const Scene &source){
if(this != &source){
count = source.count
}
return *this;
}
我们不能通过使用它来达到同样的效果吗?
void Scene::operator=(const Scene &source){
if(this != &source){
count = source.count
}
}
答案 0 :(得分:4)
x.__dict__
运算符的语义是您可以链接赋值:
=
你必须返回一个对象才有意义。
答案 1 :(得分:0)
您可以返回引用,并且支持分配链接,如
a = b = 42;
...由于=
是右关联的,因此被解析为
a = (b = 42);
...以便a
和b
都设置为42
。
但是,除非您希望支持在标准库集合中使用对象,否则不必让赋值运算符返回任何内容。
不幸的是,标准库要求集合中的项(如果需要可赋值)必须提供一个赋值操作符,该操作符返回对该对象的引用。
此外,您需要使用该声明形式,以便为您的班级delete
或default
分配操作员。