C++ 重写运算符的返回类型=

C++ 重写运算符的返回类型=,c++,C++,假设有以下代码: struct Tester { int value = 0; void operator=(const Tester& original) { value = original.value; } }; overriding operator=的目的是像普通赋值运算符一样使用它。此函数肯定会获取参数的“值”,并将其放入宿主对象的“值” 但是,其他程序员建议使用: Tester& operator=(const Tester& or

假设有以下代码:

struct Tester
{
  int value = 0;
  void operator=(const Tester& original)
  {
    value = original.value;
  }
};
overriding operator=的目的是像普通赋值运算符一样使用它。此函数肯定会获取参数的“值”,并将其放入宿主对象的“值”

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

Tester& operator=(const Tester& original)
{
  value = original.value;
  return *this;//edited
}
以测试仪的返回类型为参考。第一个函数将执行完全相同的操作。这为什么有用,又如何有用

第一个函数将执行完全相同的操作

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

Tester& operator=(const Tester& original)
{
  value = original.value;
  return *this;
}
它可用于链接分配:

a = b = c;
您的
void
版本无法用于的内容

第一个函数将执行完全相同的操作

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

Tester& operator=(const Tester& original)
{
  value = original.value;
  return *this;
}
它可用于链接分配:

a = b = c;

您的
void
版本无法用于。

这完全有道理。谢谢这完全有道理。谢谢用于为一个函数调用赋值。更好的编程实践。用于为一个函数调用赋值。更好的编程实践。