覆盖operator =的返回类型

时间:2017-10-31 06:51:10

标签: c++

假设有这段代码:

struct Tester
{
  int value = 0;
  void operator=(const Tester& original)
  {
    value = original.value;
  }
};

重写operator =的目的是像普通赋值运算符一样使用它。这个函数肯定会取参数的“值”并将它放到宿主对象的“值”中。

但是,其他程序员建议使用:

Tester& operator=(const Tester& original)
{
  value = original.value;
  return *this;//edited
}

以Tester的返回类型作为参考。第一个函数完全相同。为什么以及如何有用?

1 个答案:

答案 0 :(得分:3)

  

第一个功能完全相同

不完全。您发布的第二个版本省略了return语句。所以它有未定义的行为。但一旦修好了:

Tester& operator=(const Tester& original)
{
  value = original.value;
  return *this;
}

它可用于链分配:

a = b = c;

您的void版本无法使用的内容。