誤人子弟篇之C++爲什麼對引用變量取地址得到的是被引用變量的地址

C++引用

 編輯

同義詞 @#Protect@#一般指C++引用

引用引入了對象的一個同義詞。定義引用的表示方法與定義指針相似,只是用&代替了*。引用(reference)是c++對c語言的重要擴充。引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。引用的聲明方法:類型標識符 &引用名=目標變量名;

(1)&在此不是求地址運算,而是起標識作用。

(2)類型標識符是指目標變量的類型。

(3)聲明引用時,必須同時對其進行初始化。

(4)引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作爲其他變量名的別名。

百度百科是這樣介紹引用的,下面我們拋開這些介紹來看一下在底層這個引用到底是怎樣實現的

有如下代碼

反彙編後

通過查看反彙編代碼會發現

1.編譯器爲引用變量b分配了四個字節的空間dword ptr [ebp-8]

2.這四個字節存放的是變量a的地址

3.當對變量a與引用變量b使用&時編譯器對此符號做出了不同的解釋

4.不同之處是在對引用變量b做&時編譯器並沒有把它解釋爲取b的地址,而是解釋爲取b的內容(b中存放的是a的地址)

 

現在我相信你不用運行這段代碼就已經知道結果了

那你是不是還是疑惑,還是想知道個爲什麼?  

爲什麼對引用變量取地址得到的是被引用變量的地址??

沒有什麼爲什麼?

如果你真的想知道爲什麼我不介意在這誤人子弟一下,,,,,

下面我們在來看一下百度百科對引用的關鍵介紹-------“引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣”

看到沒????

引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣“

C++編譯器就是爲了符合這句話,也就是說C++編譯器對引用的支持是根據這句話設計的,c++編譯器必須要保證”對引用的操作與對變量直接操作完全一樣“。。。。。。。

 

 

 

 

 

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