[C++] inline內聯函數使用方法


C++支持內聯函數,目的是為了提高函數的執行效率,類似於C語言中的宏定義

內聯函數在調用時將它在程序中的每個調用點展開,不用額外分配棧空間

 

內聯函數的定義在一個源文件中出現一次,但在多個源文件中可以同時出現,只要保證完全相同即可。

所以內聯函數可以直接在頭文件中定義,即使被多次包含,也是完全相同的,因此不會報錯。

 

inline 內聯函數的使用方法:

inline 放在函數定義的返回值前面,就可以將函數指定為內聯函數;僅僅放在聲明函數前面時無效的

inline 返回值 函數名(形參)
{
    函數體
}

 

舉例:

#include <iostream>

using namespace std;

// add 函數定義時有inline,聲明時沒有inline,但依然是內聯函數
int add(int a, int b);
// dec 函數定義時沒有inline,聲明時有inline,但依然不是內聯函數
inline int dec(int a, int b);

inline int add(int a, int b)
{
    return (a + b);
}

int dec(int a, int b)
{
    return (a - b);
}

int main(void)
{
    // 調用add(2, 3)時直接被替換為(2 + 3)
    cout << add(2, 3) << endl;
    // 調用時不會替換,要進行壓棧出棧操作
    cout << dec(5, 3) << endl;

    return 0;
}

 

注意:

1、內聯函數以代碼增大的代價減少函數調用的開銷,禁止濫用,只有函數體簡單短小,才可以使代碼更加高效

2、如果函數代碼較長或有循環語句,使用內聯函數會增大內存的消耗,不能使用內聯函數

 

宏定義與內聯函數的區別

1、宏定義是由預處理器控制實現,而內聯函數是通過編譯器控制實現

2、宏定義在預處理時就對其進行展開替換,而內聯函數是在調用時對其展開替換

3、內聯函數是真正的函數,但使用時像宏定義一樣展開,取消了函數的參數壓棧出棧的開銷

4、宏定義不檢查參數返回值等,只是對其展開,而內聯函數會檢查參數返回值等,相對更安全

5、宏定義在運行時不可以調試,而內聯函數可以

 


免責聲明!

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



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