C++ inline關鍵字


1. C的延續
     C++是一門承上啟下的編程語言,沒有寫class他就是C語言,這也導致了很多編譯器既支持C++也支持C。inline關鍵字其實更多地出現在C語言當中,因為很多短小的工作函數可以達到快速執行的效果。
     將函數聲明為inline實際上表示編譯器會將inline函數粘貼到調用點處,省去了原本函數查找、調用的時間
2. inline使用原則
     要定義一個函數為inline函數,需要滿足以下原則:
            1)不可包含復雜的結構控制語句,包括循環控制和復雜的條件控制,例如while, switch。
            2)不可包含遞歸函數
     inline函數使用無非是平衡“ 函數調用開銷 vs  函數執行開銷”,所以一個簡小的函數要重復調用時,inline函數有一定優勢。例如下面的call( )函數。
#include <iostream>
using namespace std;
inline int call( ){
    static int ctr =1;
    return ctr++;    
}
int main(){
    for(int i=0; i<500; i++)
        cout<<call()<<" "<<endl;
}
     執行過程中將call( )函數粘貼到int main()函數中的調用點“ cout<<call( )<<" "<<endl ”處。
    很多人可能有疑問,在PC上沒有感覺明顯速度優勢。但是在很多處理器功能很弱的8位、16位的嵌入式系統中,inline函數可以節約非常客觀的時間消耗。
3. inline函數定義在頭文件
     這不是絕對的,如果很多.cpp都需要這個inline函數,那么理應定義在.h中,方便函數引用、拓展。試想,你也不情願每個函數文件中都用外部函數調用來解決
extern inline int call( );
     不同的是,.h中的普通函數只要函數聲明即可。對應到Java,可以理解為Java中的抽象方法。如聲明頭文件Test.h:
#ifndef TEST_H_
#define TEST_H_
bool sort_elem(int &elem);
inline int call( ){
    static int ctr =1;
    return ctr++;    
}
#endif /* TEST_H_ */
     inline函數不僅僅要聲明,還需要定義。這樣才容易被多個文件存取。
————————————————
版權聲明:本文為CSDN博主「光膀走天涯」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zxy1198186906/article/details/82151032


免責聲明!

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



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