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;
編譯時
之間的細微差別?怎麼樣?
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;
編譯時
之間的細微差別?怎麼樣?
請參閱this question的說明。
所以你可以這樣寫代碼:
void f(const string & s) {
}
("foobar");
等
貌似我得到downvoted給了這樣一個不完整的答案。但這個問題本質上與我聯繫的一個重複。
有更詳細的信息來描述這個問題的區別。
第一個是const-reference分配的數字,第二個是const的左值分配的數字。在使用條款中,沒有區別,因爲用戶不能修改「值」。
編譯器顯然不同地處理引用,通常引用是它聲明的類型的某個對象的別名,在這種情況下,沒有變量名稱的數字被分配給引用。
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得知)
對不起,但這是不正確的。 'const int&val = 12;'是有效的,應該編譯。請參閱http://stackoverflow.com/questions/10801894/const-reference-can-be-assigned-an-int – jogojapan
@jogojapan編輯我的答案:謝謝 –
'const int&some_reference =(有些右值);'?這甚至工作嗎? – cHao
後者可以用作一個常量表達式,前者僅僅是一個延長生命週期的臨時表達式。 – ildjarn
@jogojapan:這解釋了前者是什麼(即爲什麼它是合法的以及它在做什麼),但它不能解釋前者和後者之間的實際差異(上述常數表達式就是一個例子)。 – ildjarn