2012-03-07 27 views
1

而google搜索如何重载operator =我发现一些例子 返回值http://www.cprogramming.com/tutorial/operator_overloading.html
,而我的一个朋友,是C++大师很久以前告诉我回去参考。此外,例如,当我在STL源,我看到这样的东西:应该重载运算符=是返回类&或

vector& 
    operator=(const vector& __x); 

等什么是做了正确的方法是什么?

顺便说一句,如果你好奇我的朋友告诉我,返回ref的原因是因为内置类型返回l值。

int x; 
(x = 3) += 2; 
// x is now 5. 
+3

你基本上回答了这个问题,返回一个参考。 – 2012-03-07 09:15:44

回答

5

除了特殊情况,您真的真的知道您在做什么,它应该返回class&void。 (而且大部分时间,返回void应该仅仅是“我是懒惰,并没有得到解决,以确保返回class&有意义”的占位符)

返回class是一个糟糕的主意,因为它浪费时间和内存(它会复制!)在用户不使用返回值的正常情况下,并且会彻底误导实际使用返回值的用户(并且仍然浪费时间进行复制)。

3

是的,它应该返回一个引用到自己。

1

它总是很好的使用参考,因为内存和时间都被保存了。如果你通过值传递新的对象必须被创建复制构造函数将不得不被调用。这对于时间和内存来说更昂贵。

所以通过引用来传递它,除非你有非常强的必要性被传递/返回值。