覆盖运算符的返回类型= [重复]
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
版本不能用于某些用途。
【讨论】:
这完全有道理。谢谢!以上是关于覆盖运算符的返回类型= [重复]的主要内容,如果未能解决你的问题,请参考以下文章