C++引用值,而不是复制
C++ reference to value, not copy
我有这条线
double A =uJoinFeatures1.Values [i];
这将创建双精度值的副本
struct udtJoinFeatures
{
double Values[17];
};
但出于速度原因,我只想引用该值而不复制它。请问我该怎么做?
我试过了
double A =&uJoinFeatures1.Values [i];
但这是不可能的。
您将A
声明为对double
的引用:
double& A = ...;
不过,在这种情况下,它真的不会有任何速度提升。在 64 位计算机上,double
和指针(实际上是引用)都是 64 位,复制量相同。而且由于引用实际上只是指针的另一个名称,因此当您访问引用时,您可能会获得间接寻址,这可能比仅使用double
添加更多的指令。
并不是说无论如何它都是可测量的,除非你在一个紧密循环中对数百万个项目这样做。
特别是出于速度原因,一定要复制!
间接访问可能比复制几个字节的成本更高,特别是因为它使编译器更难将值保留在寄存器中(它必须首先优化引用;引用只能指向内存)。
无论如何,这绝对是一个过早的优化。在确保所有算法都具有最佳复杂性、最小化分配、工作重复和所有其他算法问题之后,您应该确保内部循环是内联的,并且您会发现编译器无论如何都会对普通复制变体做最好的事情。
相关文章:
- 深层复制具有自引用指针的类
- 对复制 CTOR 和 CTOR 的未定义引用
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- C++:右值引用构造函数和复制省略
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 如何复制只引用基类的派生类
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++为具有引用成员变量的类创建复制构造函数
- std::vector 是否有用于引用的复制构造函数?
- 是复制了新数组还是指向结构中引用的数组的指针?
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 通过引用传递是否涉及复制地址
- 复制引用结构上的赋值
- 在 c++ 中复制对未初始化对象的引用
- C++自动生成的具有常量和非常量引用的复制构造函数
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- Icpc错误隐式生成的赋值运算符无法复制引用成员(boost图)
- 函数复制引用字符数组中的数据