2012-10-11 131 views
4

Possible Duplicate:
const reference can be assigned an int?const int&value = 12和const int value = 12之間的區別;

const int& value = 12; 

const int value = 12; 
編譯時

之間的細微差別?怎麼樣?

+0

'const int&some_reference =(有些右值);'?這甚至工作嗎? – cHao

+2

後者可以用作一個常量表達式,前者僅僅是一個延長生命週期的臨時表達式。 – ildjarn

+0

@jogojapan:這解釋了前者是什麼(即爲什麼它是合法的以及它在做什麼),但它不能解釋前者和後者之間的實際差異(上述常數表達式就是一個例子)。 – ildjarn

回答

-1

請參閱this question的說明。

所以你可以這樣寫代碼:

void f(const string & s) { 
} 

("foobar"); 

貌似我得到downvoted給了這樣一個不完整的答案。但這個問題本質上與我聯繫的一個重複。

有更詳細的信息來描述這個問題的區別。

0

第一個是const-reference分配的數字,第二個是const的左值分配的數字。在使用條款中,沒有區別,因爲用戶不能修改「值」。
編譯器顯然不同地處理引用,通常引用是它聲明的類型的某個對象的別名,在這種情況下,沒有變量名稱的數字被分配給引用。

1
int value = 12; 

這裏'值'是值變量。

其中是int &用於創建其他變量的引用變量(別名)。像

int i; 
int& j=i; 

j和我指的是相同的內存位置。 it c++ concept.

但是無法爲存儲位置創建引用變量。所以我的想法下面的表達式是錯誤PROMT

int& i = 12; `Will not compile even.`  

關於常量

常量關鍵字用來創建一個只讀變量。一旦初始化,變量的值就不能改變。考慮下面的代碼:

const int x = 2; // const var can be initialized, not modified thereafter 
x = 10;   // error - cannot modify const variable 

錯誤:錯誤:只讀變量「x」的

另外表達可使用常量的分配的類型的兩側。

const int value = 12; 
int const value = 12; 

兩個表達式都是相同的(對於簡單的非指針數據類型)。瞭解here 我們看到的最常見的地方是參考函數參數或返回值。

常量與參考變量

臨時被創建,並且是合法的一個const參考綁定到它,但非法將其綁定到一個非const之一。

它就像:

const int& reference_to_const_int = int(20); //LEGAL 
     int& reference_to_const_int = int(20); //ILLEGAL 

一個const參考延伸的臨時的生活,這就是爲什麼這個工程。這只是語言的一個規則。 (我從here得知)

+2

對不起,但這是不正確的。 'const int&val = 12;'是有效的,應該編譯。請參閱http://stackoverflow.com/questions/10801894/const-reference-can-be-assigned-an-int – jogojapan

+0

@jogojapan編輯我的答案:謝謝 –

相關問題