在C ++中按值或引用传输参数?

时间:2012-11-08 09:30:38

标签: c++ parameters pass-by-value pass-by-const-reference

  

可能重复:
  Pass by reference more expensive than pass by value

我想知道哪个更好,通过值或C ++中的引用发送参数。我听说有些情况下按值发送比通过引用发送更快。这些是哪些情况?

由于

2 个答案:

答案 0 :(得分:1)

显而易见的情况是,当参数等于或小于指针大小为且微不足道时要复制 - 那么你将通过值传递。然而,这是一个古老的讨论,需要相当长的答案才能正确回答给定的体系结构。还有许多极端情况(例如RVO)。

问题不仅仅是速度 - 语义应该是你的第一要务。

另请参阅:Is it better in C++ to pass by value or pass by constant reference?

答案 1 :(得分:1)

作为一般规则,您应该通过const引用按值和复杂类型传递POD类型。

也就是说,按值传递复杂类型的好地方是无论如何都需要函数内部对象的副本。在这种情况下,您有两种选择:

  • 将参数作为const引用传递,并在函数

  • 中创建本地副本
  • 按值传递参数(编译器创建本地副本)。

第二种选择通常更有效。有关示例,请参阅copy&swap idiom