我应该在哪里更喜欢按引用传递或按值传递?

新手上路,请多包涵

在什么情况下我应该更喜欢按引用传递?价值传递?

原文由 Vishwanath Dalvi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 311
2 个回答

在四种主要情况下,您应该使用按引用传递而不是按值传递:

  1. 如果您正在调用需要修改其参数的函数,请使用 pass-by-reference 或 pass-by-pointer。否则,您将获得参数的副本。
  2. 如果您正在调用需要将大对象作为参数的函数,请通过 const 引用传递它,以避免对该对象进行不必要的复制并降低效率。
  3. 如果您正在编写根据定义必须采用引用的复制或移动构造函数,请使用按引用传递。
  4. 如果您正在编写一个想要对多态类进行操作的函数,请使用按引用传递或按指针传递以避免切片。

原文由 templatetypedef 发布,翻译遵循 CC BY-SA 4.0 许可协议

有几个考虑因素,包括:

表现

按值传递会复制数据,因此按值传递大型数据结构会抑制性能。通过引用传递只传递对数据的引用(基本上是地址)。对于大型数据结构,这可以大大提高性能。对于较小的数据结构(如 int),按引用传递会抑制性能。

修改

按值传递会复制数据,因此如果目标代码修改该副本,则不会影响原始代码。通过引用传递仅传递数据的地址,因此对该引用所做的修改将对调用代码“可见”。

原文由 Kent Boogaart 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题