引用和const引用的區別

語法很簡單,雖然簡單我再囉嗦一下。

int& 就是聲明一個int的引用類型。
int value;
int& ref = value;
這樣就順利通過編譯。如果引用沒初始化則編譯器拒絕編譯過去,知道你引用的是實際存在的變量。

有人會寫下這樣的代碼 int& ref = 1;這時候編譯器拒絕了他,因爲編譯器找不到常量1的地址,於是這時候可以得到一個結論引用的變量必須有一個實際的地址。

在const & 的時候就有差別了
先說一下相似的
int value;
const int & ref = value;
ref = 1;//編譯器毫不留情的拒絕此語法。因爲ref是const的,不能改寫。
但對ref取值的時候則就是value的值。value變ref也跟着變,但不得對ref進行賦值。

接下來就是最大區別的地方了
const int& ref = 1;
編譯器接受了這樣的語法。這有問題麼?沒問題,這是一個特別的規定

會這樣處理
int no_name_value = 1;
const int& ref = no_name_value;
這跟上面的代碼類型,但區別在於no_name_value這個變量你是不能使用的,根本看不到有這個變量的存在。
但確實編譯器會這樣處理,增加了一個沒有任何名字的變量,然後讓這個const& 去引用他。
記住最重要的一點,no_name_value和ref的生存週期是同步的。兩個存在同時銷燬。

我們用一個簡單的例子演示一下。


結果如下

begin
構造函數Value=2
print   Value=2
end
析構函數Value=2

是不是const&很特別的呢;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章