2010-10-17 226 views
1
iarray<T>& operator = (iarray<T>& v) 

爲什麼返回類型是iarray<T>&而不是iarray<T>運營商超載

UPDATE

誰能闡述非常詳細,爲什麼iarray<T> const &v

+1

注意,它通常應該是'iarray 運算符=(iarray 常量&v)'; – 2010-10-17 03:35:32

+0

你能闡述爲什麼'iarray 常量和v' – Alan 2010-10-17 04:04:03

+0

@Alan:這樣一個臨時的值(不能綁定到非常量參考) – 2010-10-17 05:19:52

回答

8

因爲你不想爲了鏈接而返回數組的副本。返回引用是一個更好的選擇,因爲它不會導致構建副本。

+0

對,應該說「有效率」,更正 – 2010-10-17 02:55:44

3

因爲那麼你可以有效地鏈接它們,例如。

a = b = c; 

查看C++ FAQ

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值,但反之不然。

+0

我認爲鏈接也適用,如果返回類型是'iarray ',不是嗎? – Alan 2010-10-17 11:01:43

+0

它導致創建和銷燬一個不必要的臨時對象,所以返回一個引用,如果它讓你感覺更好,那麼把它作爲'const'引用。 – 2010-10-17 16:54:30