运算符重载[重复]

问题描述 投票:0回答:3
iarray<T>& operator =    (iarray<T>& v)

为什么返回类型是

iarray<T>&
而不是
iarray<T>

更新

有人可以详细说明为什么吗

iarray<T> const &v

c++ operator-overloading
3个回答
8
投票

因为您不想仅仅为了链接而返回数组的副本。返回引用是一个更好的选择,因为它不会导致构造副本。


3
投票

因为这样你就可以有效地链接它们,例如。

a = b = c;

请参阅 C++ 常见问题解答


0
投票

为什么返回类型是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
值,但反之则不然。

© www.soinside.com 2019 - 2024. All rights reserved.