最基本的形式是:widget & operator= (const widget & )
知道为什么要返回引用吗?
1. 因为c++设计的目的是要使得自定义类也可以像内置类型那样可以有简单的操作:像operator assignment就是其中之一。
比如int a, b,c,你可以像这样赋值 a=b=c;
那么对于:widget wa, wb,wc;也应该可以进行这样的操作才是,wa= wb= wc,但为什么要返回引用呢?其实不返回引用,wa=wb=wc也是可以正常工作的。但是还有一种情况就是 (wa=wb)= wc,看起来有点怪,对于内置数据类型又是合法的,所以呢,为了保持一致,就有必要让operator assignment返回引用。
情况之一:返回引用。 执行(wa=wb)= wc后,wa等于wc的值,符合一贯逻辑。
情况之二:返回的不是引用。执行(wa=wb)= wc后,wa的值等于wb。因为执行完(wa=wb)之后返回的是临时对象。
今天还看到了这种写法 const widget & operator= (const widget & )
返回const就不能执行(wa=wb)= wc这类操作了,Effective C++中明确提出了不宜返回const,除非你有别用。
对于参数为什么是const 引用就不多说了,那简直是必须的!
参考书籍:Effective C++ 2nd.
知道为什么要返回引用吗?
1. 因为c++设计的目的是要使得自定义类也可以像内置类型那样可以有简单的操作:像operator assignment就是其中之一。
比如int a, b,c,你可以像这样赋值 a=b=c;
那么对于:widget wa, wb,wc;也应该可以进行这样的操作才是,wa= wb= wc,但为什么要返回引用呢?其实不返回引用,wa=wb=wc也是可以正常工作的。但是还有一种情况就是 (wa=wb)= wc,看起来有点怪,对于内置数据类型又是合法的,所以呢,为了保持一致,就有必要让operator assignment返回引用。
情况之一:返回引用。 执行(wa=wb)= wc后,wa等于wc的值,符合一贯逻辑。
情况之二:返回的不是引用。执行(wa=wb)= wc后,wa的值等于wb。因为执行完(wa=wb)之后返回的是临时对象。
今天还看到了这种写法 const widget & operator= (const widget & )
返回const就不能执行(wa=wb)= wc这类操作了,Effective C++中明确提出了不宜返回const,除非你有别用。
对于参数为什么是const 引用就不多说了,那简直是必须的!
参考书籍:Effective C++ 2nd.