內聯函式分析

2021-10-01 07:01:48 字數 1094 閱讀 2248

1、內聯函式

1、c++中 const 可以代替巨集常量定義。

如: const int a = 3; ==>> #define a 3

既然const 可以代替 巨集常量 的定義 是否有其他辦法代替 巨集** 呢? 有,內聯函式。

2、內聯函式。

1、c++中推薦使用內聯函式代替巨集**片段。

2、c++中使用 inline 關鍵字宣告內聯函式。

**:inline int func(int a, int b)

3、內聯函式宣告時應該將函式定義和 inline 關鍵字放在一起,不然編譯器會直接忽略內聯請求。

4、c++編譯器可以將乙個函式內聯編譯。

5、被c++編譯器內聯編譯的函式叫做內聯函式。

6、c++編譯器直接將函式體插入到函式呼叫的地方。

7、內聯函式沒有普通函式呼叫時的開銷。(壓棧,跳轉,返回)。

8、c++編譯器不一定滿足函式的內聯要求。

9、內聯函式具有普通函式的特徵。(引數檢查,返回型別)。

10、函式的內聯請求可能會被編譯器拒絕。

11、函式被內聯編譯後,函式體直接擴充套件到呼叫的地方。

12、巨集**片段經過預處理,只是簡單的文字替換,沒有任何編譯過程,所以會產生***。

13、現代編譯器對編譯過程進行了優化,就算有些函式沒有 inline 宣告,也有可能被內聯編譯。

14、一些c++編譯提供了擴充套件語法,能夠對函式進行強制編譯:如:g++:attribute((always_inline))屬性。

3、注意事項:

1、c++中 inline 內聯有一些限制。

2、inline 函式中不能存在任何形式的迴圈語句。

3、不能存在過多的條件判斷。

4、函式體不能過於龐大。

5、不能對函式進行取值操作。

7、函式內聯宣告必須在函式呼叫之前。

4、小結:

1、c++中使用 inline 進行函式宣告。

2、編譯器直接將 inline 函式體擴充套件到函式呼叫的地方。

3、inline 只是一種請求,編譯器不一定允許這種請求。

4、內聯函式省去了函式入棧,跳轉等開銷。

C 學習記錄6 內聯函式分析

c 中const常量可以代替巨集常數定義 使用內聯函式替代巨集 片段。c 中標推薦使用內聯函式代替巨集 片段。c 中使用inline關鍵字宣告內聯函式。內聯函式宣告時inline關鍵字必須和函式定義結合在一起,否則編譯器會直接忽略內聯請求。函式呼叫時,會有引數入棧 函式返回 棧變數的銷毀等等的開銷,...

第6課 內聯函式分析

帶參函式巨集內聯函式 優點編譯器會做引數的靜態型別檢查 原地展開,沒有呼叫開銷 並且在預處理階段完成,不占用編譯時間。函式 被裝入符號表中,在使用時進行替換 沒有呼叫開銷,效率高,會進行引數型別檢查 缺點需要傳參 棧變數的開闢和銷毀 壓棧 跳轉 返回開銷 不進行型別檢查,多次巨集替換會導致 體積變大...

inline函式 第6課 內聯函式分析

一 常量與巨集回顧 c 中的const常量可以替代巨集常數定義,如 const int a 3 等價於 define a 3 那麼c 中是否有解決方案替代巨集 片段呢?請看以下內容。二 內聯函式的定義 1 c 中推薦使用內聯函式替代巨集 片段 2 c 中使用inline關鍵字宣告內聯函式 3 內聯函...