2013-07-27 58 views
1

我讀到C++參考變量和某處我發現這一點:「引用永遠不能引用另一個對象」是什麼意思?

const引用的聲明是多餘的,因爲參考是永不會被提及的另一個對象。

這是什麼意思?

這裏,例如,我可以更改基準參照對象:

void p(int& i) { 
    int a = 7,c = 0; 
    i = a; 
} 

那麼,這是否意味着「參考永不會被引用到另一個對象」?

在此先感謝。

+0

also http://stackoverflow.com/questions/728233/why-are-references-not-reseatable-in-c – billz

+0

查看引用的最佳方式是作爲他們引用的內容的不同名稱: int i; int&r = i;'在這裏,'r'是'i'的不同名稱。理解「r」不*指向'i'是至關重要的。 'r' *是*'i'。它不可能是'我'以外的任何東西。這就是爲什麼文字說「永遠不可能引用另一個對象」。 –

回答

3

這意味着,給定這個代碼

int a; 
int b; 
int& ref = a; 

的是,一旦你初始化refa,有沒有辦法可以讓它指b或任何其他變量。

對引用所做的任何更改都會反映在您用來初始化它的變量上。引用(本身甚至不是一個適當的對象)保持不變。

此外,只有引用的對象保持活動狀態,引用纔可用。

+0

太棒了!謝謝 ! – Billie

1

在你的例子中,你沒有改變i指向的東西。它將i的值更改爲值a。如果你在哪裏顯示地址i,你會發現它與a不同。

0

如果你int &r = x;這意味着rx每次你改變r時候,你真的改變x。同樣,每次更改x時,通過r都可以看到更改。

現在,「參考永遠不能引用另一個對象」的意思是,一旦你做了int &r =x,就不能使r參考y。你可以做r = y;,但是所做的一切就是設置x等於y。這並不意味着更改r之後將更改y也不意味着通過r可以看到y的更改。

0

想象它最簡單的方法是在三分球方面講:

// reference      // equivalent pointer code 
int& r = a;      int* const r = &a; 

r = b;       *r = b; 

function(r);      function(*r); 

也就是說,在聲明的那一刻,參考聲明別名到現有對象的內存位置。然後,任何引用的使用都等同於取消引用該內存位置的指針。

現在,什麼const參考?那麼這將是:

// reference      // equivalent pointer code 
int& const r = a;    int* const const r = &a; 

int const& const r = a;   int const* const const r = &a; 

這使得冗餘相當明顯,我相信。

相關問題