2013-02-06 163 views
-2

考慮以下幾點:引用變量等於另一個引用變量?

int someA = 1; 
int someB = 2; 

int &a = someA; 
int &b = someB; 

a = b; // what happens here? 

這裏發生的與參考?只是好奇。

+5

這裏沒有編譯錯誤。 (請參閱http://ideone.com/RR4vcz) –

+0

請參閱http://stackoverflow.com/questions/9293674/can-we-reassign-the-reference-in-c瞭解您在此處完成的工作。 – KBart

+0

@OliCharlesworth:這個代碼是UB,因爲它使用爲實現保留的名稱。 :) – ybungalobill

回答

3

讓兩個參考變量彼此相等本身並不是錯誤。這可能令人困惑。但是,您的代碼所做的不是設置對另一個引用的引用,而是將_A的值從1更改爲2,這就是_B中的內容。

您只能設置一個參考ONCE [初始化位置]。一旦它被初始化,它就會變成原始變量的別名。

你可以這樣做:

int &a = _A; 
int &b = _A; 

a = b; 

將價值1存入_A,它的值已經1

+0

我正在尋找的答案。 – Placeable

2

這裏沒有錯誤,但我想我可能知道你對此感到困惑。該引用不會被重新分配,但其引用內容的值將被重新分配。

所以,當你做a = b;你基本上這樣說:_A = _B,因爲引用是一個別名。

引用永遠不能像指針一樣重新分配。

引用也不能爲空。

3

你不能在函數外部有語句。

a = b; //compile error? 

這是一個語句,因此必須在功能:

int _A = 1; 
int _B = 2; 

int &a = _A; 
int &b = _B; 

int main() 
{ 
    a = b; //compile error? No. Now it compiles. 

    // As 'a' and 'b' are references. 
    // This means they are just another name for an already existing variable 
    // ie they are alias 
    // 
    // It means that it is equivalent to using the original values. 
    // 
    // Thus it is equivalent too: 
    _A = _B; 
} 

現在它編譯。

+0

我改寫了這個問題。這不是我正在尋找的答案。 – Placeable

+0

@Placeable:那麼你應該問一個新的問題! –

+0

問題是一樣的。語法和註釋已更改。 – Placeable