c 基礎知識5 內聯函式

2021-10-23 18:07:22 字數 904 閱讀 4587

內聯函式

解釋:程式在編譯時,會將內聯函式嵌入到呼叫處,適用於功能簡單、規模較小、使用頻繁的函式。

格式:inline 函式體

優點:沒有普通函式呼叫的壓棧、跳轉、返回等操作,提高執行效率

缺點:增加**量,消耗記憶體空間。

使用限制:為了防止編譯器過於老舊,出現不能內聯的現象,建議對內聯函式進行如下限制——內聯函式中不能有迴圈體、過多的條件判斷語句、函式體過於龐大、異常介面宣告。另外遞迴函式無法內聯處理,不能對內聯函式進行取址操作。

補充說明:內聯函式不同於巨集**塊,巨集**塊是預處理器替換操作的,而內聯函式是編譯器控制的。另外,編譯器也許會根據情況不進行內聯操作,而僅僅將它作為普通函式編譯。

當然,可以通過配置進行強制內聯,如g++編譯器可以用__attribute__((always_inline))關鍵字強制(放在cpp**中)。

舉例:

#define func(a,b)  ((a)<(b) ? (a) : (b))	

//巨集**塊

inline

intfunc

(int a,

int b)

//inline內聯函式

intmain

(void

)

分析: 乍一看巨集**塊和內聯函式的功能一樣,然而執行的結果卻不同。因為巨集**塊在預處理時被展開為 func(++a, b) ==> ((++a)<(b) ? (++a) : (b))

即,a先自加1為2,由於2小於b,所以返回++a,也就是3。而且a自加了兩次,也就為3。

可見巨集**塊是有其不可避免的弊端的。

C 基礎知識5

1 有參的父類建構函式 class student protected person 初始化列表 只能加在定義當中,不能寫在宣告當中 有子物件的派生類建構函式 先構造父類,再構造子物件,再構造自己。初始化列表的順序沒有關係 組合關係 聚合關係 生命週期沒有必然聯絡 部分和整體的關係 緊密 繼承關係 ...

C 基礎知識(5)

列舉 是一種資料型別,列舉適用於取值範圍有限的資料 訪問許可權修飾符 enum 列舉名 列舉的訪問許可權修飾符與類一致,修飾符可寫可不寫。類的預設值為interal,列舉的預設值也是interal。列舉名遵循大駝峰命名法。列舉一般和switch case結合使用。eg public enum sea...

C 基礎知識 函式

寫在前面 在剛上大學的時候,學習各種各樣的計算機基礎知識,對我而言,剛開的時候我是不理解的,知識太抽象,只是機械的記住了概念和用法,往往忽略了一些細節。當自己實踐增多的時候,各種知識漸漸的清晰起來,所有東西都是有來龍去脈的,原來不理解的東西都豁然開朗起來。這個時候再取回顧原來學習的知識技能,又有一種...