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++重载赋值操作符的返回值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

89.赋值重载以及深浅拷贝

赋值构造函数(重载赋值操作符)(c++常问问题二)

c++ 拷贝构造函数与赋值运算符重载函数的区别是

赋值运算符的返回类型是啥?

C++学习基础六——复制构造函数和赋值操作符

C++进一步认识类与对象