可能重复:
按引用传递比按值传递更昂贵
我想知道哪个更好,在 C++ 中按值或按引用发送参数。我听说有些情况下按值发送比按引用发送更快。这些是哪些案例?
谢谢
显而易见的情况是,当参数的大小等于或小于指针并且复制起来很简单时——那么您将按值传递。然而,这是一个古老的讨论,需要很长的答案才能正确回答给定的架构。还有许多极端情况(例如 RVO)。
这个问题比速度更重要——语义应该是你的首要任务。
作为一般规则,您应该通过值传递 POD 类型,通过 const 引用传递复杂类型。
也就是说,按值传递复杂类型的好地方是无论如何都需要函数内部的对象副本。在这种情况下,您有两个选择:
将参数作为 const 引用传递并在函数内创建本地副本
按值传递参数(编译器创建本地副本)。
第二种选择通常更有效。例如,请参阅copy&swap idiom。