c++重载赋值操作符的返回值是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++重载赋值操作符的返回值是啥?相关的知识,希望对你有一定的参考价值。

classname classname::operate=(classname)
……

返回值是this还是*this?可以是别的吗?
另外,点号(比如classname.function())和解引用*哪个优先级更高?

通常返回的是引用,比如classname&,原因是重载的操作符要尽可能和内建操作符看上去一致。比如我们对int赋值时,

int i, j;
i = j = 0

如果我们不返回引用,假设返回void,那么就不能连续赋值了。重载的目的之一是为了提供语法上的方便,并且在适当情况下要保持和内建操作的一致性,这样就不会违反直觉了。

返回引用的话,我们就必须返回对象而不是对象的指针,所以必须是*this,而this是指针。


点操作符的优先级比解引用的高。

参考技术A 1 classname classname::operate=(classname)........... 的返回值 就是 classname , 但是不是*this 这要看内部实现.
比如:
1)classname classname::operate=(classname)return *this; //就是*this
2)classname classname::operate=(classname)

static classname data;

................................

return data; //就不是.



2 点的优先级高. 但拿不准,最好用括号标明.
参考技术B 我只知道解引用的优先级小于点好

以上是关于c++重载赋值操作符的返回值是啥?的主要内容,如果未能解决你的问题,请参考以下文章