程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ inline函數,inline函數

C++ inline函數,inline函數

編輯:C++入門知識

C++ inline函數,inline函數


本文主要記錄了C++中的inline函數,也就是內聯函數,主要記錄了以下幾個問題:


主要目的:用它代替C語言中表達式形式的宏定義來解決程序中函數調用的效率問題。

C語言中的宏定義:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)這種宏定義,它使用預處理器實現,沒有了參數壓棧、代碼生成等一系列得到操作,因此效率很高。但缺點如下:

  • 僅僅是做預處理器符號表中的簡單替換,因此不能進行參數有效性的檢測,不能享受C++編譯器嚴格類型檢查的好處。
  • 另外,它的返回值也不能被強制轉換為可轉換的合適類型。
  • 還有,C++引入了類及類的訪問控制,這樣,如果一個操作或者說一個表達式涉及類的保護成員或者私有成員,這種宏定義就無法實現(因為無法將this指針放在合適的位置上)

由上述示例代碼可知:A類的2個成員函數都是inline函數,readTest()函數的定義在類內,所以自動轉化為inline函數,setTest()函數的定義在類外,所以必須加inline關鍵字。類的成員常定義成保護和私有的,外界不能直接訪問這些成員,所以必須有成員接口函數來訪問。這些接口函數被定義成inline函數,會獲得比較好的效果。所以,inline函數常用於定義存取函數(代碼簡短),inline函數的效率比較高。


inline是以代碼的膨脹(復制)為待見的,僅僅省去了函數調用的開銷,從而提高了函數的執行效率。如果,執行函數體內代碼的時間相比於函數調用的開銷大,那麼效率的收獲會很少。另一方面,每一個inline函數的調用都要復制代碼,使程序的總代碼量增大,消耗更多的內存空間。
所以:

  • 函數的代碼量比較大時,使用inline函數會使內存消耗代價較高。
  • 函數體內出現循環,那麼執行函數的時間要比函數調用的開銷大。
  • 另外,類的構造函數和析構函數容易讓人誤解成使用inline更有效。要當心構造函數和析構函數可能會隱藏一些行為,如“偷偷地執行基類或成員對象的構造函數和析構函數。”

一個好的編譯器會根據函數體,自動取消不適合的inline函數。(說明了,inline不應該出現在類的內部,及函數的聲明的部分)


五、inline函數與宏的區別?


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved