iarray<T>& operator = (iarray<T>& v)
为什么返回类型是
iarray<T>&
而不是iarray<T>
?
更新
有人可以详细说明为什么吗
iarray<T> const &v
?
因为您不想仅仅为了链接而返回数组的副本。返回引用是一个更好的选择,因为它不会导致构造副本。
为什么返回类型是iarray&而不是iarray?
因为赋值的结果是对刚刚赋值的内容的引用。例如,
a = b
的结果应该是对a
的引用,这样你就可以像c = a = b;
一样将它们链接在一起,这实际上是a = b; c = a;
。 (是的,人们在极少数情况下喜欢这样做;不,我不知道为什么将其分成两行如此困难。)因此你的代码应该如下所示:
iarray<T>& iarray<T>::operator = (const iarray<T>& v)
{
// ... copy `v`'s state over this object's ...
return *this;
}
有人可以详细说明为什么 iarray const &v 吗?
因为赋值操作没有必要改变右边;这是意想不到的行为。如果你的对象中有一些奇怪的东西需要改变,比如引用计数,那么你应该更喜欢声明一部分
mutable
而不是不允许 const
右侧表达式。您可以为 const
参数传递非 const
值,但反之则不然。