C++ Qt通过常量引用传递--更高效?为什么?

C++ Qt通过常量引用传递--更高效?为什么?,c++,qt,constants,pass-by-reference,C++,Qt,Constants,Pass By Reference,我被告知将Qt/C++应用程序中的所有pass-by-value或pass-by-reference参数更改为pass-by-const-reference。所有Qt类型(例如QString)都是相关的,但本机类型(double、integer)除外。你能更准确地解释一下原因吗,或者参考一下 当通过引用传递时,我们传递的是同一实例的地址,其中,通过值涉及将对象复制到另一个实例(在QString的情况下,通过复制构造函数),int、double等本机类型的大小将更小,因此与QString类似的对象

我被告知将Qt/C++应用程序中的所有pass-by-value或pass-by-reference参数更改为pass-by-const-reference。所有Qt类型(例如QString)都是相关的,但本机类型(double、integer)除外。你能更准确地解释一下原因吗,或者参考一下

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

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

另一方面,通过引用传递会使对象易受更改的影响-如果在函数中更改了对象的状态,则会修改原始对象,因为它们是相同的。这就是为什么要使用常量引用:它可以防止错误地更改/编辑对象


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

。多态性的可能副本仅适用于按指针传递-按引用传递很可能不会编译。为什么?在较低的级别,引用是一个PoTin。在C++语法级别上,它不会编译!对不起-你说得对-请原谅我!!(早上过得不好!)