C++ inline内联函数详解
函數(shù)是一個可以重復(fù)使用的代碼塊,CPU 會一條一條地挨著執(zhí)行其中的代碼。CPU 在執(zhí)行主調(diào)函數(shù)代碼時(shí)如果遇到了被調(diào)函數(shù),主調(diào)函數(shù)就會暫停,CPU 轉(zhuǎn)而執(zhí)行被調(diào)函數(shù)的代碼;被調(diào)函數(shù)執(zhí)行完畢后再返回到主調(diào)函數(shù),主調(diào)函數(shù)根據(jù)剛才的狀態(tài)繼續(xù)往下執(zhí)行。
如果函數(shù)體代碼比較多,需要較長的執(zhí)行時(shí)間,那么函數(shù)調(diào)用機(jī)制占用的時(shí)間可以忽略;如果函數(shù)只有一兩條語句,那么大部分的時(shí)間都會花費(fèi)在函數(shù)調(diào)用機(jī)制上,這種時(shí)間開銷就就不容忽視。
為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)。
指定內(nèi)聯(lián)函數(shù)的方法很簡單,只需要在函數(shù)定義處增加 inline 關(guān)鍵字。請看下面的例子:
#include <iostream> using namespace std;//內(nèi)聯(lián)函數(shù),交換兩個數(shù)的值 inline void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp; }int main(){int m, n;cin>>m>>n;cout<<m<<", "<<n<<endl;swap(&m, &n);cout<<m<<", "<<n<<endl;return 0; }運(yùn)行結(jié)果:
42 85 85, 42 85, 42注意,要在函數(shù)定義處添加 inline 關(guān)鍵字,在函數(shù)聲明處添加 inline 關(guān)鍵字雖然沒有錯,但這種做法是無效的,編譯器會忽略函數(shù)聲明處的 inline 關(guān)鍵字。
當(dāng)編譯器遇到函數(shù)調(diào)用swap(&m, &n)時(shí),會用 swap() 函數(shù)的代碼替換swap(&m, &n),同時(shí)用實(shí)參代替形參。這樣,程序第 16 行就被置換成:
int temp; temp = *(&m); *(&m) = *(&n); *(&n) = temp;編譯器可能會將 (&m)、(&n) 分別優(yōu)化為 m、n。
由于內(nèi)聯(lián)函數(shù)比較短小,我們通常的做法是省略函數(shù)原型,將整個函數(shù)定義(包括函數(shù)頭和函數(shù)體)放在本應(yīng)該提供函數(shù)原型的地方。
總結(jié)
以上是生活随笔為你收集整理的C++ inline内联函数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 菱形
- 下一篇: Eclipse快捷键生成语句