2014-03-03 41 views
1

我想問一個簡單的問題,讓我混淆。 例如,如果我寫在參數中沒有參考&。但在第二種情況下,我用&與rectangleType &,我很困惑,爲什麼我們使用這個&時,我們可以做到這一點,而不是這個&。這是必要的,爲什麼我們使用它。我的問題不是複製構造函數。對象引用和沒有引用

rectangleType rectangleType::operator+ 
(const rectangleType rectangle) 

案例2:

rectangleType rectangleType::operator+ 
(const rectangleType& rectangle) 
+1

http:// stackoverflow。com/questions/2564873/reference-parameters-in-c-very-basic-example-please –

回答

2

當您通過值傳遞類似rectangleType(或任何其他類型)的對象時,您正在製作該對象的副本。這意味着:

  • 調用者看不到該函數對該對象所做的任何更改,因爲更改是在副本上進行的,而不是原始對象。
  • 複製對象會導致性能成本。
  • 複製對象可能不適用於某些類型。

    • 你想要的功能,以便能夠修改原始對象:

    因此,通過參考每當經過。

  • 您希望代碼運行速度更快,無需進行復制。
  • 您傳遞的對象沒有公共拷貝構造函數。

路過常量參考每當你需要的功能,可以修改原來的對象。

對於用戶定義的類型,這基本上歸結爲「儘可能通過引用傳遞」。

+0

OP詢問const引用 – Paranaix

+0

@Paranaix他沒有; 'const'只出現在他的示例代碼中,從他的問題來看,我認爲他的困惑比'const'更明確。儘管如此,我在我的回答中添加了關於「const」的註釋。 – TypeIA

0

你怎麼可以說你的問題不是拷貝構造,如果是的answere呢?

  1. 用const引用沒有複製而成,這樣可以非常大的對象
  2. 有類至極明確地不提供拷貝構造函數,這樣你還可以通過他們周圍是至關重要的。

所以得出結論:您獲得的好處沒有缺點。

0

在第一種方法中,它將收到一個(完整)實例rectangleType,該實例將使用複製構造函數創建,僅作爲參數傳遞。

在第二種方法中,它將接收對已經存在的實例的引用;不會複製。