C 中的引用和內聯函式

2021-10-06 14:16:39 字數 1496 閱讀 1623

一:引用

(1)定義

引用不是新定義乙個變數,而是給已存在變數取了乙個別名,編譯器不會為引用變數開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。

(2)特性

a:引用在定義時必須初始化。

b:乙個變數可以有多個引用。

c:引用一旦引用乙個實體,再不能引用其他實體。

(3)使用場景

a:做引數

void

swap

(int

& left,

int& right)

b:做返回值

int

&count()

(4)引用和指標的區別a:引用在定義時必須初始化,指標沒有要求。

b:引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體。

c:沒有null引用,但有null指標。

d:在sizeof中含義不同,引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數(32位平台下佔4個位元組)。

e:引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小。

f: 有多級指標,但是沒有多級引用。

g: 訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理。

h:引用比指標使用起來相對更安全。

二:內聯函式

(1)定義

以inline修飾的函式叫做內聯函式,編譯時c++編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率。

(2)檢視方式

1、 在release模式下,檢視編譯器生成的彙編**中是否存在call add。

2、在debug模式下,需要對編譯器進行設定,否則不會展開(因為debug模式下,編譯器預設不會對**進行優化,以下給出vs2013的設定方式:

(3)特性

1、inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以**很長或者有迴圈/遞迴的函式不適宜使用作為內聯函式。

2、inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等等,編譯器優化時會忽略掉內聯。

3、 inline不建議宣告和定義分離,分離會導致鏈結錯誤。因為inline被展開,就沒有函式位址了,鏈結就會找不到。

C 內聯函式和引用變數

內聯函式和普通函式的使用方法沒有本質區別,我們來看乙個例子,下面展示了內聯函式的使用方法 include using namespace std 下面展示內聯函式的使用 inline double square doublex intmain 從上面我們可以看到我們定義乙個內聯函式只需要在普通函式的...

引用和內聯函式

內聯函式是c 為提高程式執行速度所做的一項改進。編譯過程的最終產品是可執行程式 由一組機器語言指令組成 程式執行時,作業系統將這些指令載入到計算機記憶體中,因此每條指令都有特定的記憶體位址。常規函式呼叫過程 程式跳到函式的位址,並在函式結束時返回。即,程式執行到函式呼叫指令時,將在函式呼叫後立即儲存...

C 函式過載 引用 內聯函式

2 函式過載 3 引用 4 內聯函式 在宣告或定義函式時,給函式的引數設定乙個預設值,當使用者對函式進行呼叫時,如果傳遞了實參,則使用使用者傳遞的實參 如果沒有傳遞則使用預設值。預設引數必須從右往左給出 不能在函式宣告和定義的位置同時給出 預設引數在提供時 常量 全域性變數 c語言不支援。相同作用域...