2016-02-28 23 views
-1

這是指C++編程語言。假設我們有一個類C和做到這一點:C++:使用const的引用和生命週期擴展

C var1 = C(init_parameters); 

C& var2(var1); 

問題1: 如果我們改變VAR2,例如var2.memberA = 3,是這也影響var1?或者我們是否創建了一個新對象,以便var2不參考var1

問題2: 假設我們有這樣的功能:

const C& f(C var1) { 
    const C& tmp(var1); 
    return tmp; 
} 

可我們現在所說的上述功能,例如value = f(var1)並獲得有效的參考value?原則上返回參考超出範圍,但const延長壽命?如果var1被修改或刪除,會發生什麼情況,這會影響常量引用value?換句話說,爲了清楚起見,我可以使用變量value,就好像它是var1的副本一樣嗎?

+1

「這裏我們稱複製構造函數」不是真的。 'var2'是一個參考。 – juanchopanza

+0

您可以解釋一下,我會糾正我的陳述嗎? – Mannaggia

+0

「'var2'是對'var1'的引用」將是準確的。 – juanchopanza

回答

2

C& var2(var1);const C& tmp(var1);不會調用任何特殊的成員函數。您聲明references - 引用對象/變量的別名(是的,對var2所作的更改實際上是由var2var1)。

關於壽命延長,適用於綁定右值到const&var1是一個左值,其壽命固定在其範圍內。

對於第二個示例,無法將參考(甚至到const)返回到局部變量。別名不會改變這一點。調用者將得到的所有內容都是一個懸而未決的參考。

+0

可以通過將rvalues綁定到const&?來進行延長壽命的例子嗎? Thx – Mannaggia

+1

@Mannaggia [This](http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/)。 – LogicStuff

相關問題