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 內聯函...