【发布时间】:2011-01-27 17:00:57
【问题描述】:
据我了解,重载 operator= 时,返回值应该是非常量引用。
A& A::operator=( const A& )
{
// check for self-assignment, do assignment
return *this;
}
允许在以下情况下调用非常量成员函数是非常量的:
( a = b ).f();
但是为什么要返回一个引用呢?如果返回值没有声明为引用,比如按值返回,在什么情况下会出现问题?
假设拷贝构造函数实现正确。
【问题讨论】:
-
如果您希望人们将赋值更像是语句而不是表达式,您可以返回
void。这将阻止(a=b)=c、a=(b=c)和任何其他可能揭示值和引用之间差异的恶作剧。 -
我发现当我需要防止对象从堆栈中自动销毁时,在赋值运算符上返回 void 很有用。对于引用计数的对象,您不希望在您不了解它们时调用析构函数。
标签: c++ operator-overloading assignment-operator