我被告知在Qt / C ++应用程序中更改所有传递值或传递引用参数以传递const引用。所有Qt类型(例如QString)都是关注的,但不是本机类型(double,integer)。你能更准确地解释一下原因,还是指向参考?
答案 0 :(得分:4)
按值传递会生成参数的本地副本,因此如果传递大型结构,则可能会造成相当大的时间和空间损失。这就是大型结构应通过参考传递的原因。但是如果函数/方法确实需要参数的副本,那么按值传递它。
另一方面,通过引用传递会使对象容易受到更改 - 如果在函数中更改了对象的状态,则原始对象会被修改,因为它们是相同的。这就是使用const引用的原因:它可以防止错误地更改/编辑对象。
另一个原因是多态性。当传递值时,虚拟性会丢失,而通过引用传递或指针虚拟方法按预期工作。
答案 1 :(得分:3)
当通过引用传递时,我们传递相同实例的地址,其中传递值涉及将对象复制到另一个(通过QString
的情况下的复制构造函数)本机类型(如int,double等)将是尺寸更小,因此比较QString
类似对象的开销更少。通过传递const
引用,我们确保在传递的函数中不会修改对象,因为被调用函数所做的更改会影响作为两个点传递到同一位置的对象。