什么是inline函数:
inline函数是在编译时进行内联代码的替换,类似于宏,但与宏不同,inline函数节省了函数调用时地址切换所用的时间!由于inline函数是直接将函数调用为替换内联代码,所以增加了内存的消耗,(如果有10处存在该函数调用,那么将存在10处内联代码,这样便增加了内存的消耗)。
1,常规的内联函数实现:
inline int f(int x);
inline int f(int x){***************} //将函数声明和定义都添上inline
或者:inline int f(int x){*************} //直接将含有inline的定义替换掉上面的两行代码
2,类的内联函数:
class a
{
public:
int f(int x) {************} //f(x)自动变为类内联函数
}
或者:class a
{
public:
int f(int x);
}
inline int a::f(int x) {********************} //这种实现中,内联方法的声明和实现必须在一个文件中,
不可以这样写:class a
{public:
inline int f(int x);
} //声明在.h文件中
inline int f(int x) {***********} // 实现在.cpp文件中
出现这种原因是由于内联函数是内部链接性,在调用函数的文件里必须包含内联函数的定义,即内敛函数的定义必须对编译器是可见的,以便编译器能够在调用点内展开该函数的内联代码,此时,若仅有函数原型是不行的。所以类声明的头文件必须包含内联实现。(或者将内联实现写在另一个头文件中,然后调用函数的文件中包含这两个头文件)
注意:由于内联函数是内部链接性,所以可以把定义放在头文件中,但最好不要把普通的函数定义,或者普通类方法定义放在头文件中,这样容易造成多重定义(比如一个程序的两个文件同时包含该头文件)普通的函数或类方法的链接性是外部的,便违背了单定义原则!