引用
引用概念:
引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會爲引用變量開闢內存空間,它和它 引用的變量共用同一塊內存空間。
形式:
類型& 引用變量名(對象名) = 引用實體
int& ra = a;//<====定義引用類型
引用的類型必須和實體類型相同。
在我們使用引用的時候注意特性
-
引用在定義時必須初始化
-
一個變量可以有多個引用
-
引用一旦引用一個實體,再不能引用其他實體
4.當實體爲加上了const引用的類型也需要加因爲權限的一致。
5.引用也可以做參數和返回值
效率比較
引用之所以能效率非常高是因爲在引用就相當於是一份文件的另一個名字,在拿到實體值的過程中,先會把實體變量進行一份臨時的拷貝然後將其作爲參數給到創建的引用。因此會比直接傳值效率高很多
指針和引用區別
在語法概念上引用就是一個別名,沒有獨立空間,和其引用實體共用同一塊空間。
在底層實現上實際是有空間的,因爲引用是按照指針方式來實現的。
這裏就體現了特性:引用是將原值進行一份臨時拷貝,而指針是直接取原數據的地址。
引用和指針的不同點:
- 引用在定義時必須初始化,指針沒有要求
- 引用在初始化時引用一個實體後,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型
實體 - 沒有NULL引用,但有NULL指針
- 在sizeof中含義不同:引用結果爲引用類型的大小,但指針始終是地址空間所佔字節個數(32位平臺下佔
4個字節) - 引用自加即引用的實體增加1,指針自加即指針向後偏移一個類型的大小
- 有多級指針,但是沒有多級引用
- 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
- 引用比指針使用起來相對更安全
內聯函數
內聯函數是什麼?
以inline修飾的函數叫做內聯函數,編譯時C++編譯器會在調用內聯函數的地方展開,沒有函數壓棧的開銷,
內聯函數提升程序運行的效率。
特性:
- inline是一種以空間換時間的做法,省去調用函數額開銷。所以代碼很長或者有循環/遞歸的函數不適宜
使用作爲內聯函數。 - inline對於編譯器而言只是一個建議,編譯器會自動優化,如果定義爲inline的函數體內有循環/遞歸等
等,編譯器優化時會忽略掉內聯。 - inline不建議聲明和定義分離,分離會導致鏈接錯誤。因爲inline被展開,就沒有函數地址了,鏈接就會
找不到。