”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 何时使用按值传递与按右​​值引用传递?

何时使用按值传递与按右​​值引用传递?

发布于2024-11-09
浏览:271

When to Use Pass by Value vs Pass by Rvalue Reference?

理解按值传递与按右​​值引用传递

定义函数参数时,在按值传递和按右值引用传递之间进行选择可以显着影响函数的接口和效率。

按值传递与按右​​值传递参考

在按值传递中,会在函数内创建参数的副本。通过右值引用传递时,会创建对原始参数的引用,从而允许直接操作该参数。

接口中的区别

右值引用参数的使用向调用者传达以下消息:

  • 该函数需要参数的所有权。
  • 该函数可以修改参数,并且调用者不应依赖于原始状态。

另一方面,按值传递表示:

  • 函数创建其自己的参数的本地副本。
  • 调用者可以独立于函数的操作继续使用原始参数。

效率注意事项

  • No Elision:使用右值引用传递可以消除对移动构造函数调用的需要,从而提高性能。
  • 编译器优化:按值传递可能为编译器优化提供更好的机会,因为它可以安全地消除副本或移动。不过,这种说法需要通过代码优化分析得到具体证据。

其他注意事项

  • 通过右值引用传递允许移动参数,但是不强制执行。
  • 按值传递可确保发生移动(假设没有省略)。
  • 按值传递可以使用指向外部数据的指针处理大型数据结构时效率较低。右值引用通过允许直接访问指向的内容,在此类场景中提供性能优势。

应用指南

  • 在以下情况下使用按值传递您不需要参数的所有权并希望保留其原始状态。
  • 当您打算获得参数的所有权并可能修改时,请使用按右值引用传递it.
  • 使用外部数据指针处理大型数据结构时请考虑性能影响,因为通过右值引用传递可提供潜在的性能优势。
版本声明 本文转载于:1729690219如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3