我被告知将 Qt/C++ 应用程序中的所有按值传递或按引用传递参数更改为按 const 引用传递。所有 Qt 类型(例如 QString)都涉及,但不涉及本机类型(双精度、整数)。您能否更准确地解释原因或指向参考?
问问题
2086 次
2 回答
4
按值传递会生成参数的本地副本,因此如果传递一个大结构,则可能会浪费大量时间和空间。这就是为什么大结构应该通过引用传递。但是如果函数/方法真的需要参数的副本,那就按值传递。
另一方面,通过引用传递使对象容易受到更改 - 如果对象的状态在函数中发生更改,则原始对象将被修改,因为它们是相同的。这就是使用 const 引用的原因:它可以防止错误地更改/编辑对象。
另一个原因是多态性。当按值传递时,虚拟性丢失,而按引用或指针传递时,虚拟方法按预期工作。
于 2012-07-10T07:50:27.270 回答
3
当通过引用传递时,我们传递的是同一个实例的地址,其中通过值传递涉及将对象复制到另一个实例(通过复制构造函数QString
),如 int、double 等本机类型的大小将更小,因此开销更少比较QString
相似的对象。通过传递const
引用,我们确保对象不会在传递的函数中被修改,因为被调用函数所做的更改会影响传递的对象,因为它们都指向同一位置。
于 2012-07-10T07:48:19.183 回答