我有线
double A =uJoinFeatures1.Values [i];
这将创建双精度值的副本
struct udtJoinFeatures
{
double Values[17];
};
但出于速度原因,我只想引用该值而不复制它。请问我该怎么做?
我试过了
double A =&uJoinFeatures1.Values [i];
但那是不可能的。
您声明A
为对 a 的引用double
:
double& A = ...;
不过,在这种情况下,它实际上不会有任何速度增加。在 64 位机器上, adouble
和指针(实际上是引用)都是 64 位,复制的数量相同。并且因为引用实际上只是指针的另一个名称,所以当您访问引用时您具有间接性,这可能会添加更多指令而不是仅使用double
.
并不是说它无论如何都是可测量的,除非你在一个紧密的循环中对数百万个项目执行此操作。
特别是出于速度原因,请务必复制!
间接访问可能比复制几个字节花费更多,特别是因为它使编译器更难将值保存在寄存器中(它必须首先优化引用;引用只能指向内存)。
无论如何,这绝对是一个过早的优化。在确保所有算法都具有最佳复杂性、最小化分配、工作重复和所有其他算法问题之后,您应该确保内循环是内联的,然后您会发现编译器会用无论如何,普通副本变体。