2015-11-04 101 views

回答

1

如果第一個構造函數被調用,傳遞給它的參數將被複制而不是val參數將綁定到傳遞的參數(copy by reference)。

如果調用第二個構造函數,則傳遞給它的參數將爲,其值爲

兩個構造函數都相同,它們分別初始化_valval,並按值執行額外的複製。

所以,沒有任何的優化,它看起來像這樣:

            Copies 
const int& constructor   1 
int constructor       2 
+2

這在技術上是正確的。然而,引用可能會被編譯爲一個指針,這意味着*指針*必須被複制而不是值。 –

1

基本上,構造2做一個拷貝兩次:第一次通話和intialization第二次。 另一方面,您瞭解引用不過是一個指針,並且隨着引用變量的大小減小到指針大小,在引用因子1和2之間沒有成本降低。

+0

雖然其中一個副本可以被刪除。 – juanchopanza

+1

是的,這是我的猜測。所以,第二次做一個沒有優化的副本。因此,對於大對象更好的第一個解決方案。或者,甚至更好的是直接傳遞一個int &&。 –

1

通常,您從不需要通過int變量通過const引用。

真正的問題是:你爲什麼在意?如果Foo構建在循環內部,並且迭代次數很多,那麼只會有可測量的速度差異。它幾乎是發生在循環內部的唯一事情 - 非常不可能。

所以就使用#2。不是因爲效率,而是因爲它更簡單。

+0

int只是爲了簡單。使用模板參數而不是int。我的問題是如果編譯器沒有執行copy-elision,那麼拷貝的數量是多少 –

相關問題