天天看點

inline學習筆記

1.inline作為内聯函數的關鍵字,和我們所知的宏很相似,在使用時編譯器将其展開,做了代碼拷貝;

2.inline是作為定義而存在的關鍵字,隻作為申明是沒有意義的,關聯1所描述的,沒有定義,如何展開呢?

3.inline函數定義必須是針對編譯器可見的,在使用的地方必須明确知道在什麼地方,如下:

a.h

class a

{

    public:

        inline int max(int a, int b);

}

a.cpp

inline int a::max(int a, int b)

{

      return a>b ? a:b;

}

main.cpp

#include "a.h"

int main()

{

   a tmp;

   tmp.max(1,2);

}

會提示undefined reference,将inline函數定義放在.h檔案中,如下

a.h

class a

{

    public:

        inline int a::max(int a, int b)

        {

             return a>b ? a:b;

        }

};

ok,編譯成功,建議把定義放在.h頭檔案中

4.相比宏,inline函數有類型檢查的優勢,另外也能防止宏邊界錯誤問題(如#define max(a, b) a>b , 使用時 max(x++, y));

5.不可濫用inline,雖然inline函數相比普通函數,減少了調用開銷,但增加了代碼量,是以inline函數過大那就得不償失了,通常建議在10行以内。

更為詳細的介紹:http://www.jb51.net/article/46261.htm