2012-11-08 68 views
0

可能重複:
Pass by reference more expensive than pass by value通過值或在C++中引用傳輸參數?

我想知道哪個更好,發送通過值或在C++中引用參數。我聽說有些情況下,按值發送比按參考發送要快。這些情況是哪些?

感謝

+2

你從哪裏聽說過? – UmNyobe

+0

按值發送時 - 創建對象的副本(耗費時間和空間)。所以相反,最好通過const&or發送(如果你想修改對象) –

+0

@UmNyobe也許在這裏[想要速度?按價值傳遞。](http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/)。但是這裏也有一個討論:http://stackoverflow.com/questions/2108084/pass-by-reference-more-expensive-than-pass-by-value – RedX

回答

1

作爲一般規則,你應該值和複雜類型由const引用傳遞POD類型。

也就是說,按值傳遞複雜類型的好地方就是在函數內部需要對象的副本。在這種情況下,你有兩個選擇:

  • 傳遞參數爲const引用和功能

  • 內創建一個本地副本按值傳遞參數(編譯器創建的本地副本)。

第二個選項通常更高效。有關示例,請參閱copy&swap idiom

1

明顯的情況是,當參數等於或在大小比指針小,小事複製 - 那麼你會按值傳遞。然而,這是一個古老的討論,需要相當長的答案才能正確回答給定的體系結構。還有很多角落案例(例如RVO)。

還有更多的問題比速度 - 語義應該是你的第一優先級。

參見:Is it better in C++ to pass by value or pass by constant reference?