【发布时间】:2012-07-09 15:46:08
【问题描述】:
有人告诉我将 Qt/C++ 应用程序中的所有按值传递或按引用传递参数更改为按 const 引用传递。所有 Qt 类型(例如 QString)都涉及,但不涉及本机类型(双精度、整数)。您能否更准确地解释原因或指向参考?
【问题讨论】:
标签: c++ qt constants pass-by-reference
有人告诉我将 Qt/C++ 应用程序中的所有按值传递或按引用传递参数更改为按 const 引用传递。所有 Qt 类型(例如 QString)都涉及,但不涉及本机类型(双精度、整数)。您能否更准确地解释原因或指向参考?
【问题讨论】:
标签: c++ qt constants pass-by-reference
当通过引用传递时,我们传递的是同一个实例的地址,其中通过值传递涉及将对象复制到另一个实例(在QString 的情况下通过复制构造函数),int、double 等原生类型在大小,因此与 QString 类似的对象相比,开销更少。通过传递const 引用,我们确保对象不会在传递的函数中被修改,因为被调用函数所做的更改会影响传递的对象,因为它们都指向同一位置。
【讨论】:
按值传递会生成参数的本地副本,因此如果传递大型结构,则可能会损失大量时间和空间。这就是为什么大结构应该通过引用传递。但是如果函数/方法确实需要参数的副本,那就传值吧。
另一方面,通过引用传递使对象容易受到更改 - 如果对象的状态在函数中发生更改,则原始对象会被修改,因为它们是相同的。这就是使用 const 引用的原因:它可以防止错误地更改/编辑对象。
另一个原因是多态性。当按值传递时,虚拟会丢失,而按引用或指针传递时,虚拟方法会按预期工作。
【讨论】: