華清遠見嵌入式學院
講師。c++中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。
從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c++提供了內聯函式的機制來提高效率,也就是在編譯時將所呼叫的函式的**嵌入到主函式中,這種嵌入到主函式中的函式稱為內聯函式。
內聯函式的實現方式:
1. 在作為內聯的函式前加關鍵字inline。
2. 在類的定義過程中將函式的實現直接放在類中實現。
如下例:
#include
using namespace std;
inline int max(int m , int n )
int main()
如上例,使用了內聯函式來進行2個數中最大值的求解,由於在定義函式的時候指定max函式為內聯函式,因此編譯系統在遇到函式呼叫語句時,就用max函式體的**來代替呼叫語句,同時將實參代替行參。這樣分析來看,內聯函式與c語言中的巨集定義有些類似,但不同的是,巨集定義是在預處理的過程中進行的,只作簡單的替換而不作語法檢查,所以與我們現在提到的內聯函式還是有本質的不同,需要理解區分一下。
並不是我們對某個函式進行內聯函式的宣告,系統就將其作為內聯函式來使用,編譯器會觀察其是否符合成為內聯函式的要求,須滿足如下條件:
1. 函式體短小精悍
2. 沒有迴圈及開關語句
3. 沒有static關鍵字
綜上所述,並不是我們進行了相應的宣告就可以定義乙個內聯函式,另外需要說明的是:
1. 內聯說明對於編譯器來說只是乙個建議,編譯器可以選擇忽略這個建議,大多數的編譯器都不支援遞迴的函式內聯,乙個過長的函式也不太可能在呼叫點進行內聯展開。
2. 內聯函式應該在標頭檔案中定義,這一點不同於其他函式。
3. 如果在標頭檔案中加入或修改內聯函式時,使用了該標頭檔案的所有原始檔都必須重新編譯。
www.farsight.com.cn
)
C 中的內聯函式
c 中的內聯函式 華清遠見嵌入式學院講師。c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效...
C 中的內聯函式
本文主要和大家一起來學習一下c 中的內聯函式,旨在能夠更深層次的了解和掌握c 相關用法,力爭做到知其然還要知其所以然。關於內聯函式,本文主要從以下幾個方面進行了整理和歸納。一 相關描述 1 內聯函式主要目的是為了提高函式的執行效率,用關鍵字inline放在函式定義的前面即可,將函式指定為內聯函式。2...
C 中的內聯函式
c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效率,也就是在編譯時將所呼叫的函式的 嵌入到...