2015-10-19 58 views
-1

我知道我不允許寫long& const x。但爲什麼不呢?理論上,我可以有一個不斷的參考x。我只是無法將引用設置爲另一個地址。爲什麼在C++中沒有常量引用?

爲什麼在C++中禁止使用?

編輯:我知道有些東西我不明白,但我可以指定另一個變量的引用。這段代碼的作品:

#include <iostream> 

int main() 
{ 
int a = 1, b = 2; 
int & x = a; 
x = b; 
return 0; 
} 

但是,這是一個矛盾,你在哪裏。

+7

你是否錯過了引用總是不變的事實? –

+2

const引用是這樣聲明的:'const long&x' –

+0

*「但我可以給另一個變量賦值」* - 不,你不能;你的代碼實際上做的是將'b'的值移到'a'中,而不是重定位引用。請記住 - 作爲參考 - x是a的一個別名形式,所以無論你做什麼,它都會透明地影響'a' - 包括賦值。不能改變'x'來解決不同的對象。 –

回答

6

參考文獻已經始終保持不變。

在初始化之後,您不能重新指定它們以引用另一個變量,並且必須始終將它們初始化爲引用一個變量。

在你的榜樣,代碼沒有做什麼,你認爲它是:

x = b;不重新分配xb,它的b的值賦給變量x被引用,即a

對於變量,引用只是一個別名,另一個名稱。這意味着您可以用a替代x的每個實例,並且行爲將是相同的。

+0

謝謝,這就是我一直在尋找的! – user2738748

3

我只是不能將引用設置爲另一個地址。

你已經做不到了。

引用是不可變的。添加const不會使它們「更」不可變。

根本沒有理由補充這一點,並且有理由避免它可能帶來的混淆。

特別是,它會導致人們認爲引用是對象,他們不是。引用不是指向不同的外表。它們是參考文獻;另一個對象的別名。並且名稱不能是const

我可以給另一個變量分配一個引用。

不,你不能。

這與您所在的行爲是矛盾的。

不,這是你誤解你自己的代碼。通過x = b,您可以將a設置爲2

相關問題