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

时间:2013-09-24 10:46:04

标签: c++ reference

我有一行

double A =uJoinFeatures1.Values [i];

这会创建双值

的副本
struct udtJoinFeatures
{
    double Values[17];
};

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

我试过

double A =&uJoinFeatures1.Values [i];

但这是不可能的。

2 个答案:

答案 0 :(得分:3)

您声明A是对double

的引用
double& A = ...;

在这种情况下,它确实不会有任何速度增加。在64位机器上,double和指针(实际上都是引用)都是64位,复制量相同。并且因为引用实际上只是指针的另一个名称,所以当您访问可能添加更多指令的引用而不仅仅使用double时,您具有间接性。

不管怎样它都不会被测量,除非你在紧密循环中对数百万件物品这样做。

答案 1 :(得分:1)

出于速度原因,尤其是COPY!

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

无论如何,这绝对是一个不成熟的优化。在确定所有算法都具有最佳复杂性,最小化分配,工作重复和所有其他算法问题之后,您应确保内部循环内联,并且您将发现编译器将尽可能做到最好。无论如何,正常的副本变种。