【C++初階】淺談引用和行內函數
阿新 • • 發佈:2021-02-15
技術標籤:C++
引用和行內函數
引用
引用概念:
引用不是新定義一個變數,而是給已存在變數取了一個別名,編譯器不會為引用變數開闢記憶體空間,它和它 引用的變數共用同一塊記憶體空間。
形式:
型別& 引用變數名(物件名) = 引用實體
int& ra = a;//<====定義引用型別
引用的型別必須和實體型別相同。
在我們使用引用的時候注意特性
-
引用在定義時必須初始化
-
一個變數可以有多個引用
-
引用一旦引用一個實體,再不能引用其他實體
4.當實體為加上了const引用的型別也需要加因為許可權的一致。
5.引用也可以做引數和返回值
效率比較
引用之所以能效率非常高是因為在引用就相當於是一份檔案的另一個名字,在拿到實體值的過程中,先會把實體變數進行一份臨時的拷貝然後將其作為引數給到建立的引用。因此會比直接傳值效率高很多
指標和引用區別
在語法概念上引用就是一個別名,沒有獨立空間,和其引用實體共用同一塊空間。
在底層實現上實際是有空間的,因為引用是按照指標方式來實現的。
這裡就體現了特性:引用是將原值進行一份臨時拷貝,而指標是直接取原資料的地址。
引用和指標的不同點:
- 引用在定義時必須初始化,指標沒有要求
- 引用在初始化時引用一個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何一個同類型
實體 - 沒有NULL引用,但有NULL指標
- 在sizeof中含義不同:引用結果為引用型別的大小,但指標始終是地址空間所佔位元組個數(32位平臺下佔
4個位元組) - 引用自加即引用的實體增加1,指標自加即指標向後偏移一個型別的大小
- 有多級指標,但是沒有多級引用
- 訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理
- 引用比指標使用起來相對更安全
行內函數
行內函數是什麼?
以inline修飾的函式叫做行內函數,編譯時C++編譯器會在呼叫行內函數的地方展開,沒有函式壓棧的開銷,
行內函數提升程式執行的效率。
特性:
- inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以程式碼很長或者有迴圈/遞迴的函式不適宜
使用作為行內函數。 - inline對於編譯器而言只是一個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等
- inline不建議宣告和定義分離,分離會導致連結錯誤。因為inline被展開,就沒有函式地址了,連結就會
找不到。