天天看點

C++——内聯函數

1.内聯函數

在C++中我們通常定義以下函數來求兩個整數的最大值:

int max(int a, int b)

{

    return a > b ? a : b;

}

為這麼一個小的操作定義一個函數的好處有:

① 閱讀和了解函數 max 的調用,要比讀一條等價的條件表達式并解釋它的含義要容易得多

② 如果需要做任何修改,修改函數要比找出并修改每一處等價表達式容易得多

③ 使用函數可以確定統一的行為,每個測試都保證以相同的方式實作

④ 函數可以重用,不必為其他應用程式重寫代碼

雖然有這麼多好處,但是寫成函數有一個潛在的缺點:調用函數比求解等價表達式要慢得多。在大多數的機器上,調用函數都要做很多工作:調用前要先儲存寄存器,并在傳回時恢複,複制實參,程式還必須轉向一個新位置執行

C++中支援内聯函數,其目的是為了提高函數的執行效率,用關鍵字 inline 放在函數定義(注意是定義而非聲明,下文繼續講到)的前面即可将函數指定為内聯函數,内聯函數通常就是将它在程式中的每個調用點上“内聯地”展開,假設我們将 max 定義為内聯函數:

inline int max(int a, int b)

{

    return a > b ? a : b;

}

則調用:cout << max(a, b) << endl;

在編譯時展開為:cout << (a > b ? a : b) << endl; 進而消除了把 max寫成函數的額外執行開銷。

Google C++編碼規範中則規定得更加明确和詳細:

内聯函數:

Tip: 隻有當函數隻有 10 行甚至更少時才将其定義為内聯函數.

來自 <https://blog.csdn.net/BjarneCpp/article/details/76044493#commentBox>