2013-09-24 108 views
0

我也行C++參考價值,而不是複製

double A =uJoinFeatures1.Values [i]; 

這產生了雙重價值

struct udtJoinFeatures 
{ 
    double Values[17]; 
}; 

但對速度的原因,我只想引用值,而不副本複製它。 請問我該怎麼做?

我試圖

double A =&uJoinFeatures1.Values [i]; 

但是這是不可能的。

+0

'double&A = uJoinFeatures1.Values [i];' – Aneri

+4

複製'double'應該像複製'double *'一樣快,並且可能允許更快的訪問。 –

+0

@BenjaminBannier,但你不能用它來分配一個值。 – Aneri

回答

3

您聲明A作爲對double參考:

double& A = ...; 

在這種情況下,雖然,它真的是不會被任何速度增加。在64位機器上,double和一個指針(它們實際上都是)都是64位,與複製的數量相同。而且由於引用實際上只是指針的另一個名稱,所以在訪問引用時可能會有間接性,這可能會增加更多指令,而不僅僅是使用double

不管它是否可以測量,除非您在緊密循環中爲數百萬項目執行此操作。

+0

不是const?沒有它,它不適合我。 – tmighty

+1

@tmighty然後'const double&A = ...;'我也更新了我的答案,我建議你重新閱讀它。總結一下:你不會加快速度(不是沒有什麼可測量的),也許它會變得更糟。 –

+0

是的,我讀到像真空吸塵器:-)我只是不確定你爲什麼不說「const」,我想知道我是否錯過了其他東西。 – tmighty

1

特別是速度的原因,一定要複製!

間接訪問可能比複製幾個字節花費更多,尤其是因爲它使編譯器難以將值保存在寄存器中(它必須首先優化引用;引用只能指向內存)。

無論如何這絕對是一個不成熟的優化。確保所有算法具有最佳複雜性,最小化分配,工作重複和所有其他算法問題後,應確保內部循環已內聯,並且您會發現編譯器將盡最大努力正常的拷貝變種。