C++引用值,而不是复制

C++ reference to value, not copy

本文关键字:复制 引用 C++      更新时间:2023-10-16

我有这条线

double A =uJoinFeatures1.Values [i];

这将创建双精度值的副本

struct udtJoinFeatures
{
    double Values[17];
};

但出于速度原因,我只想引用该值而不复制它。请问我该怎么做?

我试过了

double A =&uJoinFeatures1.Values [i];

但这是不可能的。

您将A声明为对double的引用:

double& A = ...;

不过,在这种情况下,它真的不会有任何速度提升。在 64 位计算机上,double和指针(实际上是引用)都是 64 位,复制量相同。而且由于引用实际上只是指针的另一个名称,因此当您访问引用时,您可能会获得间接寻址,这可能比仅使用double添加更多的指令。

并不是说无论如何它都是可测量的,除非你在一个紧密循环中对数百万个项目这样做。

特别是出于速度原因,一定要复制!

间接访问可能比复制几个字节的成本更高,特别是因为它使编译器更难将值保留在寄存器中(它必须首先优化引用;引用只能指向内存)。

无论如何,这绝对是一个过早的优化。在确保所有算法都具有最佳复杂性、最小化分配、工作重复和所有其他算法问题之后,您应该确保内部循环是内联的,并且您会发现编译器无论如何都会对普通复制变体做最好的事情。