C 常引用的本質

2021-09-21 18:34:54 字數 1398 閱讀 8358

引用作為形參時以常指標作為實現方式,而引用還有常引用的形式,顧名思義他的實現方式就是指向常量的常指標,即物件位址與值都不可修改,即

不過常引用有一些有意思的特性,被const修飾的物件的引用必須是常引用,一般引用繫結const物件時不合法的。

根據錯誤提示可知,由於物件是被const修飾 的,表示不能被修改,引用當然也不能修改,必須使用const引用。

而另乙個特性則是const引用可以使用相關型別的物件初始化,

void main()
這是使用了整形常量初始化了常引用,而這是合法的。

void main()
這是使用了浮點數初始化了常引用,而這是合法的。

常引用申請了新記憶體以存放初始化的值,並以const修飾,這樣就可以實現對引用物件的型別轉換,不過這樣也等於引用了新的物件,跟最初的引用物件就沒關係了。

那麼初始化常量的操作也可以解釋地通,常引用先申請一塊記憶體存放常量,再指向記憶體位址,這樣就可以完成一般引用不會申請記憶體便完不成的操作。

由於會申請記憶體,常引用還有另一種特性,關聯相關型別的物件時會轉換型別。

常引用有了自己的記憶體,那麼初始化常量的操作也可以解釋地通,常引用先申請一塊記憶體存放常量,再指向記憶體位址,這樣就可以完成一般引用不會申請記憶體便完不成的操作。

由於會申請記憶體,常引用還有另一種特性,關聯相關型別的物件時會轉換型別。

可見第二次的值也沒有改變,可這時a對應的位址的值已經改變了,那麼常引用指向的位址肯定不同於物件了,不過這樣也等於引用了新的物件,跟最初的引用物件就沒關係了。

而轉換型別可以理解為先申請一段記憶體用於存放整形,再將物件的值放入記憶體,最後再將常引用指向記憶體,這樣就會指向與常引用相同型別的物件了。

C 引用的本質

引用的意義 1 引用作為其他變數的別名而存在,因此在一些場合可以代替指標 2 引用相對於指標來說具有更好的可讀性和實用性 引用的本質 1 單獨定義普通引用時 必須初始化,說明很像乙個常量 includeusing namespace std 1 第一點 單獨定義普通引用時 必須初始化,說明很像乙個常...

C 引用本質

b 50 mov eax,dword ptr b mov dword ptr eax 32h int d a lea eax,a mov dword ptr d eax d 60 mov eax,dword ptr d mov dword ptr eax 3ch 以上的 均來自具體的編譯器,怎麼樣,...

C 引用本質

引用本質究竟是什麼?或者說引用在計算機底層是怎麼實現的?我們來看下面一段c 1 int x 5 2 int y x 3 y 8 在vs2013下反彙編得到下面彙編 對應 1 mov dword ptr x 5 將常量5送入變數x中 對應 2 lea eax,x 取x的位址並送入eax暫存器中 mov...