C++ 为什么赋值运算符首先返回任何内容?
我知道“+”操作符必须返回一些东西,这对我来说很有意义 但我不明白的是,为什么我们在重载“=”运算符时返回一个对象。例如,请看以下内容:C++ 为什么赋值运算符首先返回任何内容?,c++,operator-overloading,C++,Operator Overloading,我知道“+”操作符必须返回一些东西,这对我来说很有意义 但我不明白的是,为什么我们在重载“=”运算符时返回一个对象。例如,请看以下内容: const Scene& Scene::operator=(const Scene &source){ if(this != &source){ count = source.count } return *this; } 我们就不能用这个来达到同样的效果吗 void Scene::opera
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
}
}
=
运算符的语义是,您可以链接分配:
a = b = c;
您必须返回一个对象才能使其有意义。操作符的语义是您可以链接分配:
a = b = c;
您必须返回一个对象才能使其有意义。您可以返回一个引用,该引用支持中的赋值链接
a = b = 42;
…由于=
是右关联的,因此将其解析为
a = (b = 42);
…以便a
和b
都设置为42
但是,您不必让赋值运算符返回任何内容,除非您希望支持在标准库集合中使用对象
不幸的是,标准库要求集合中的项(如果需要可赋值)必须提供一个赋值运算符,该运算符返回对该对象的引用
您还需要使用该声明形式,以便删除类的赋值运算符或默认值。您可以返回一个引用,该引用支持中的赋值链接
a = b = 42;
…由于=
是右关联的,因此将其解析为
a = (b = 42);
…以便a
和b
都设置为42
但是,您不必让赋值运算符返回任何内容,除非您希望支持在标准库集合中使用对象
不幸的是,标准库要求集合中的项(如果需要可赋值)必须提供一个赋值运算符,该运算符返回对该对象的引用
您还需要使用这种声明形式,以便删除类的赋值运算符或默认值。@LogicStuff-我不确定是否遵循。你在问什么?你可能还想链接(a=b)==c
-不是所有的作业。我个人认为链接作业不是一种好的做法,但返回本身对if(myOptional=functionthattgeneratesoptional()等内容有帮助
它允许我将可选项绑定到变量,并立即测试其真实性。虽然我也不会这么做。哦,我明白了。是的,你想做什么就做什么。我刚才只是举了一个惯用的例子。@LogicStuff-我不太明白。你在问什么?你可能还想链接(a=b)==c
-不是所有的作业。我个人认为链接作业不是一种好的做法,但返回本身对if(myOptional=functionthattgeneratesoptional()等内容有帮助
它允许我将可选项绑定到变量,并立即测试其真实性。虽然我也不会这么做。哦,我明白了。是的,你想做什么就做什么。我只是举了一个惯用的例子
,非错误的如果(a=b){…
,并赋值,然后在同一行的表达式中使用它:a=b+(c=d);
对于a=b=c;
,非错误的如果(a=b){…
,并赋值,然后在同一行的表达式中使用它:a=b+(c=d);