应该重载运算符=返回类&或者上课

时间:2012-03-07 09:13:51

标签: c++ operator-overloading return-by-reference

谷歌搜索如何重载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 个答案:

答案 0 :(得分:5)

除了真的非常知道你在做什么的特殊情况之外,它应该返回class&void。 (大多数时候,返回void应该只是一个占位符,因为“我很懒,而且还没有确保返回class&有意义”)

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

所以总是通过引用传递它,除非你非常强烈地需要通过值传递/返回。