iarray<T>& operator = (iarray<T>& v)
爲什麼返回類型是iarray<T>&
而不是iarray<T>
?運營商超載
UPDATE
誰能闡述非常詳細,爲什麼iarray<T> const &v
?
iarray<T>& operator = (iarray<T>& v)
爲什麼返回類型是iarray<T>&
而不是iarray<T>
?運營商超載
UPDATE
誰能闡述非常詳細,爲什麼iarray<T> const &v
?
因爲你不想爲了鏈接而返回數組的副本。返回引用是一個更好的選擇,因爲它不會導致構建副本。
對,應該說「有效率」,更正 – 2010-10-17 02:55:44
爲什麼返回類型是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
值,但反之不然。
我認爲鏈接也適用,如果返回類型是'iarray
它導致創建和銷燬一個不必要的臨時對象,所以返回一個引用,如果它讓你感覺更好,那麼把它作爲'const'引用。 – 2010-10-17 16:54:30
注意,它通常應該是'iarray運算符=(iarray 常量&v)'; –
2010-10-17 03:35:32
你能闡述爲什麼'iarray常量和v' –
Alan
2010-10-17 04:04:03
@Alan:這樣一個臨時的值(不能綁定到非常量參考) – 2010-10-17 05:19:52