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