【问题标题】:return type for overriding operator= [duplicate]覆盖运算符的返回类型= [重复]
【发布时间】:2018-04-12 06:28:11
【问题描述】:

假设有这段代码:

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 的返回类型作为参考。第一个函数的作用完全相同。为什么以及如何使用?

【问题讨论】:

  • 用于在一个函数调用中赋值。更好的编程实践。

标签: c++


【解决方案1】:

第一个函数会做同样的事情

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

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

可用于链式赋值:

a = b = c;

您的void 版本不能用于某些用途。

【讨论】:

  • 这完全有道理。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多