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++編譯器必須要保證”對引用的操作與對變量直接操作完全一樣“。。。。。。。