inline函數(內聯函數)


一、簡述

inline關鍵字放在函數返回類型前,函數實現處必須寫inline關鍵字。關鍵字inline在函數聲明部分可以加也可以不加,建議不加,因為用戶不需要知道一個函數是否是內聯函數。假如在聲明處加了inline,但是在實現處沒有加inline,那么此函數被當做普通函數處理。

與普通成員函數不同的是,inline成員函數的實現在頭文件中,因為內聯函數必須在調用該函數的每個文本文件中定義。可以使用如下書寫形式:

//Student.h
class Student
{
    public: int min_fun( int a, int b );
}

inline int Student::min_fun( int a, int b )
{
    return a < b ? a : b;
}

 假如,內聯函數的實現寫在了源文件中並且在這個源文件以外的文本文件中調用了此內聯函數,那么編譯可以通過,但是鏈接器會報“無法解析的外部符號”的錯誤。

在聲明時就實現的函數自動成為內聯函數。一個好的編譯器能自動決定函數是否應該被當做內聯函數使用,不管是否添加inline關鍵字。

 

二、內聯函數提高程序效率

普通函數的調用要經過“保存現場、轉到被調函數執行、執行完畢返回調用處、恢復現場”這一過程,產生時空開銷。內聯函數是通過代碼膨脹來執行的,在內聯函數調用處復制函數代碼,這樣省去了普通函數調用的時空開銷,提高了程序執行效率,但是由於代碼復制增加了內存開銷,所以內聯函數應當是小函數、執行耗時短的函數。這也就說明了為什么不能把所有的函數都作為內聯函數。

 

三、不要過度使用內聯函數,尤其是大函數,並且內聯函數中不要含有循環、判斷、選擇。

四、注意: 內聯函數和宏定義雖然都是代碼替換,但是完全不一樣,不要把二者混淆;  內聯成員函數可以訪問成員變量(public private protected),除了比普通成員函數執行快之外,不要刻意區分內聯成員函數和普通成員函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM