內聯函數的作用
作用:不是在調用時發生控制轉移,而是在編譯時將函數體嵌入在每一個調用處,適用於功能簡單,規模較小又使用頻繁的函數。遞歸函數無法內聯處理,內聯函數不能有循環體,switch語句,不能進行異常接口聲明。
主要體現在於inline關鍵字
內聯是以代碼膨脹(復制)為代價,僅僅省去了函數調用的開銷,從而提高函數的執行效率。如果執行函數體內代碼的時間,相比於函數調用的開銷較大,那么效率的收
獲會很少。另一方面,每一處內聯函數的調用都要復制代碼,將使程序的總代碼量增大,消耗更多的內存空間。
內聯函數和宏定義的區別
內聯函數和宏的區別在於,宏是由預處理器對宏進行替代,而內聯函數是通過編譯器控制來實現的。而且內聯函數是真正的函數,只是在需要用到的時候,內聯函數像宏一樣的展開,所以取消了函數的參數壓棧,減少了調用的開銷。你可以象調用函數一樣來調用內聯函數,而不必擔心會產生於處理宏的一些問題。內聯函數與帶參數的宏定義進行下比較,它們的代碼效率是一樣,但是內聯歡函數要優於宏定義,因為內聯函數遵循的類型和作用域規則,它與一般函數更相近,在一些編譯器中,一旦關聯上內聯擴展,將與一般函數一樣進行調用,比較方便。
另外,宏定義在使用時只是簡單的文本替換,並沒有做嚴格的參數檢查,也就不能享受C++編譯器嚴格類型檢查的好處,另外它的返回值也不能被強制轉換為可轉換的合適的類型,這樣,它的使用就存在着一系列的隱患和局限性。
使用注意事項
1.內聯函數不能包括復雜的控制語句,如循環語句和switch語句;
2.內聯函數不能包括復雜的控制語句,如循環語句和switch語句;
3.只將規模很小(一般5個語句一下)而使用頻繁的函數聲明為內聯函數。在函數規模很小的情況下,函數調用的時間開銷可能相當於甚至超過執行函數本身的時間,把它定義為內聯函數,可大大減少程序運行時間。
參考鏈接:
【1】https://www.cnblogs.com/chenwx-jay/p/inline_cpp.html
