假设有这段代码:
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的返回类型作为参考。第一个函数完全相同。为什么以及如何有用?
答案 0 :(得分:3)
第一个功能完全相同
不完全。您发布的第二个版本省略了return
语句。所以它有未定义的行为。但一旦修好了:
Tester& operator=(const Tester& original)
{
value = original.value;
return *this;
}
它可用于链分配:
a = b = c;
您的void
版本无法使用的内容。