覆盖运算符的返回类型= [重复]

Posted

技术标签:

【中文标题】覆盖运算符的返回类型= [重复]【英文标题】: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 的返回类型作为参考。第一个函数的作用完全相同。为什么以及如何使用?

【问题讨论】:

用于在一个函数调用中赋值。更好的编程实践。 【参考方案1】:

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

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

Tester& operator=(const Tester& original)

  value = original.value;
  return *this;

可用于链式赋值:

a = b = c;

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

【讨论】:

这完全有道理。谢谢!

以上是关于覆盖运算符的返回类型= [重复]的主要内容,如果未能解决你的问题,请参考以下文章

类型的打字稿传播运算符[重复]

运算符与数据类型

在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]

Python基础知识—容器类型

Python运算符与基本数据类型

在 Scala/Chisel 中使用类型参数覆盖/重载运算符