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