【问题标题】:Qt pass by const reference -- more efficient ? why?Qt 通过 const 引用传递 - 更有效?为什么?
【发布时间】:2012-07-09 15:46:08
【问题描述】:

有人告诉我将 Qt/C++ 应用程序中的所有按值传递或按引用传递参数更改为按 const 引用传递。所有 Qt 类型(例如 QString)都涉及,但不涉及本机类型(双精度、整数)。您能否更准确地解释原因或指向参考?

【问题讨论】:

标签: c++ qt constants pass-by-reference


【解决方案1】:

当通过引用传递时,我们传递的是同一个实例的地址,其中通过值传递涉及将对象复制到另一个实例(在QString 的情况下通过复制构造函数),int、double 等原生类型在大小,因此与 QString 类似的对象相比,开销更少。通过传递const 引用,我们确保对象不会在传递的函数中被修改,因为被调用函数所做的更改会影响传递的对象,因为它们都指向同一位置。

【讨论】:

    【解决方案2】:

    按值传递会生成参数的本地副本,因此如果传递大型结构,则可能会损失大量时间和空间。这就是为什么大结构应该通过引用传递。但是如果函数/方法确实需要参数的副本,那就传值吧。

    另一方面,通过引用传递使对象容易受到更改 - 如果对象的状态在函数中发生更改,则原始对象会被修改,因为它们是相同的。这就是使用 const 引用的原因:它可以防止错误地更改/编辑对象。

    另一个原因是多态性。当按值传递时,虚拟会丢失,而按引用或指针传递时,虚拟方法会按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 2019-05-10
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多