天天看點

内聯函數和宏

内聯函數是為了提高程式運作速度的一種改進。

當程式運作時,有時候需要重複調用一個函數,但是因為重複調用這個函數,會不斷的造成函數調用,

會不斷進棧出棧造成cpu的消耗。

而内聯函數是在編譯時就将這個函數邊入進去,不用再進行位址的跳轉。但是不可避免的産生了一些

記憶體的消耗,所有有時候使用者在申請内聯時,内聯函數過于大,編譯器不會進行允許

例如:

#include<iostream>

#include<ctime>

#include<windows.h>

using namespace std;

int m = 10;

inline int a(int x){ return x; }//在内聯函數中的時間為3031ms

//int a(int x){ return x;} //一般情況用了3844ms

int main(){

cout << "start" << endl;

long int sum = 0;

int istart;

istart = GetTickCount();

for (long int i = 1; i <= 100000000; i++){

sum+=a(i);

}

cout << sum << endl;

cout << GetTickCount() - istart <<"ms"<< endl;//計算運算時間

system("pause");

return 0;

可以看出他們的運作模式确實不同。

宏:

  #define a(x) x   //把a(x) 替換成x ;//注意不加差別的替換。

内聯函數和宏

由運作結果可以看出很明顯這裡運作速度遠快于普通方式和内聯方式;

但是需要注意,

#define SQUARE(x) x*x;

//#define SQUARE(x) ((x)*(x));

int m ;

m = SQUARE(1 + 3);

cout << m << endl;

這裡運作結果為7  因為是這樣計算的 1+3*1+3 

是以可以改為藍字寫的