inline只是一种要求,通常应该是比较简单的函数。取代C的“宏定义”。
内联函数默认是静态的(仅用于本文件)
下列3种情况编译器不会将函数处理成内联函数:
1、函数内有循环语句;
2、函数太复杂(取决于编译器);
3、程序中有取该函数地址的语句。
inline(内联)函数一般直接放到头(.h)文件中。
因为内联函数要在调用点展开,所以编译器必须随处可见内联函数的定义,要不然就成了非内联函数的调用了。
所以,这要求每个调用了内联函数的文件都出现了该内联函数的定义。
inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在声明前面不起任何作用。
所以说inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。
一般地,用户可以阅读函数的声明,但是看不到函数的定义。
尽管在大多数教科书中内联函数的声明、定义前面都加了inline 关键字,但inline最好不出现在函数的声明中。
eg.
如下风格的函数不能成为内联函数:
inline void func(int x);
void func(int x){
//...
}
而如下风格的函数可以成为内联函数:
void func(int x);
inline void func(int x){
//...
} //inline与函数定义体放在一起
百度百科:
在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,
用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);
也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。
但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。
另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译