为什么赋值运算符会返回任何内容?

时间:2017-02-16 21:37:40

标签: c++ operator-overloading

我知道“+”操作符必须返回一些东西,这对我来说很有意义。

但是我不明白为什么我们在重载“=”运算符时返回一个对象。例如,请查看以下内容:

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
    }
}

2 个答案:

答案 0 :(得分:4)

x.__dict__运算符的语义是您可以链接赋值:

=

你必须返回一个对象才有意义。

答案 1 :(得分:0)

可以返回引用,并且支持分配链接,如

a = b = 42;

...由于=是右关联的,因此被解析为

a = (b = 42);

...以便ab都设置为42

但是,除非您希望支持在标准库集合中使用对象,否则不必让赋值运算符返回任何内容。

不幸的是,标准库要求集合中的项(如果需要可赋值)必须提供一个赋值操作符,该操作符返回对该对象的引用。

此外,您需要使用该声明形式,以便为您的班级deletedefault分配操作员。