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