c 中內斂函式 C 內聯函式

2021-10-13 11:30:14 字數 1272 閱讀 9078

內聯函式是指用inline關鍵字修飾的函式。在類內定義的函式被預設成內聯函式。

實質就是當需要呼叫乙個內聯函式時,不是去呼叫而是將該函式**整段插入到需要使用該內聯函式的地方,從而省去呼叫過程,提高了執行速度。

缺點由於每當**呼叫到內聯函式,就需要在呼叫處直接插入一段該函式的**,所以程式的體積將會增大,消耗更多空間。

內聯函式最適用於小函式使用,例如訪問私有資料成員。 這些一行或兩行**的「訪問器」函式的主要用途是返回有關物件的狀態資訊;短函式對函式呼叫的開銷很敏感。 較長的函式在呼叫/返回序列方面花費的時間可成比例地減少,而從內聯的獲益也會減少。

1 //when_to_use_inline_functions.cpp

2 classpoint3 ;13

14 inline unsigned&point::x()15 18 inline unsigned&point::y()19 22 intmain()23

假設操作座標是此類客戶端中相對常見的操作,則將兩個訪問器函式(前面示例中的 x 和 y)指定為「內聯」通常將節省下列操作的開銷:

函式呼叫(包括引數傳遞和在堆疊上放置物件位址)

保留呼叫者的堆疊幀

設定新的堆疊幀

返回值通訊

舊堆疊幀還原

返回雖然內聯函式類似於巨集(因為在編譯時進行呼叫會展開函式**),但內聯函式是通過編譯器分析的,而巨集是通過預處理器展開的。 因此,存在很多重大差異:

內聯函式遵循對正常函式強制執行的所有型別安全協議。

使用與任何其他函式相同的語法來指定內聯函式,只不過它們在函式宣告中包含 inline 關鍵字。

計算一次作為內聯函式的引數傳遞的表示式。 在某些情況下,作為巨集的引數傳遞的表示式可計算多次。

如果出現以下情況,編譯器無法對函式進行內聯:

使用 /ob0(除錯生成的預設選項)編譯函式或其呼叫方。

函式和呼叫方使用不同型別的異常處理(乙個中使用 c++ 異常處理,另乙個中使用結構化異常處理)。

函式具有變數引數列表。

除非使用 /og、/ox、/o1 或 /o2 進行編譯,否則函式使用內聯程式集。

函式是遞迴函式,不附帶 #pragma inline_recursion(on)。 遞迴函式使用雜注內聯為 16 個呼叫的預設深度。 若要減小內聯深度,請使用 inline_depth 雜注。

函式是虛函式,進行虛擬呼叫。 對虛函式的直接呼叫可以進行內聯。

程式採用函式位址,呼叫通過指向函式的指標進行。 對採用其位址的函式的直接呼叫可以進行內聯。

函式還使用 naked __declspec 修飾符進行標記。

c 中內斂函式 C 中內聯函式

目錄 什麼是內聯函式 如何使函式內聯 為什麼要使用內聯函式 inline函式的優缺點分析 什麼時候該使用內聯函式 正文在c語言中,我們使用巨集定義函式這種借助編譯器的優化技術來減少程式的執行時間,那麼在c 中有沒有相同的技術或者更好的實現方法呢?答案是有的,那就是內聯函式。內聯函式作為編譯器優化手段...

c 中內斂函式 C 內聯函式 菜鳥教程

內聯函式 tip 只有當函式只有 10 行甚至更少時才將其定義為內聯函式.定義 當函式被宣告為內聯函式之後,編譯器會將其內聯展開,而不是按通常的函式呼叫機制進行呼叫.優點 當函式體比較小的時候,內聯該函式可以令目標 更加高效.對於訪問函式以及其它函式體比較短,效能關鍵的函式,鼓勵使用內聯.缺點 濫用...

c 中內斂函式 C 中的內聯函式分析

子宇24 1 本節課學習 c 中才引入的新的概念,內聯函式 2 常量與巨集回顧 3 內聯函式用法 1 inline int func int a,int b 2 內聯函式在表現形式上和普通函式一樣,但是它會被編譯器進行優化,編譯器直接將內聯函式的函式體進行擴充套件,這個擴充套件由編譯器直接將生成的 ...