2011-08-07 63 views
3

我對C++中const引用的概念有疑問。Const引用 - C++

int i =10; 
const int &j = i; 
cout<<"i="<<i<<" j:"<<j; // prints i:10 j:10 

i = 20; 
cout<<"i="<<i<<" j:"<<j; // prints i:20 j:10 

爲什麼第二j語句不打印新值即20

如何引用任何變量表示它們之間的強結合。

+0

在gcc 4.5.2上打印20 20,你在用什麼編譯器? – Torp

+0

這是錯的。 http://ideone.com/IATb1你在使用什麼編譯器。 –

+0

你用什麼編譯器試過這段代碼?這應該是不正確的,而且,正如我們所料,我無法用Visual Studio 2008重現它。 –

回答

6

這是一個編譯器錯誤。代碼應該打印20 20

+4

我不會稱這是一個編譯器錯誤,因爲它是如此基本,它是一個完全失敗。也因爲它與規格完全矛盾。 – Nobody

+0

所以它不是一個錯誤,如果它完全矛盾的規格? – jalf

+3

現在稱之爲錯誤還爲時過早,目前還沒有一段代碼可以重現這種影響。上述情況更可能是用戶錯誤,他們已經刪除了允許我們診斷其錯誤的相關環境。 –

4

我看不出有任何理由j不會在第二cout打印20

我跑這個代碼:

int main() { 
     int i =10; 
     const int &j = i; 
     cout<<"i="<<i<<" j:"<<j << endl; // prints i:10 j:10 

     i = 20; 
     cout<<"i="<<i<<" j:"<<j << endl; // prints i:20 j:10 
     return 0; 
} 

它給了我這樣的輸出:

i=10 j:10 
i=20 j:20 

見在線演示自己:http://ideone.com/ELbNa

這意味着,無論你是編譯器與工作有bug(這不太可能,因爲它是C++中最基本的東西),或者你沒有正確地看到輸出(這很可能是這種情況)。

+1

+1或者他們沒有複製所有的上下文。 –

+0

@Martin:是的..也許就是這樣...... – Nawaz

0

只需要在這裏添加一點,const引用不需要左值初始化它。例如

int &r = 10;   //ERROR: lvalue required 
const int &cr = 10;  //OK