重载operator=的返回类型是?
重载operator=的返回类型是classname&还是classname?
如复数类complex,几年前我试过用complex operator= (complex& c);是成功的
可惜现在代码没了不想再写了
但也有书上说是complex& operator=(complex& c);
到底区别是什么,是否都可以?
[解决办法]
用classname&
重载的+尽量要和内置类型的+号保持一致。
像内置类型的可以这样做:
int i;
(i=10)=100;
i的值为100,你重载的=也要保持这个语义
[解决办法]
重载operator=对返回类型没有要求,哪怕你写成void或是随便写一个类型,语法上也好是通过的。
但是,为了保证和基本类型语义的一致性,最好写成:
classname& operator=(const classname& c);
其他的比如
classname operator= (const classname& c);
的效率低一些,而且,还有违反基本类型语义的风险(见下面)。
其中参数c声明为const classname&比classname&好,因为前者可以用一个常量赋值,于基本类型一致。因此除非你要修改语意(如就是要在operator=中修改参数c),否则保证常量参数为佳。
也有写成
const classname& operator= (const classname& c);
但它不太合适。因为它不可以修改返回值,与基本类型语义不一致。(当然,前提仍是你不修改语意)
比如:
int i;
(i = 5) = 7;
是可以通过编译的。在赋值后的i可以继续执行左值运算。
刚才的返回值classname在这点上也有问题。