c的延续
c 是一门承上启下的编程语言,没有写class他就是c语言,这也导致了很多编译器既支持c 也支持c。inline关键字其实更多地出现在c语言当中,因为很多短小的工作函数可以达到快速执行的效果。
将函数声明为inline实际上表示编译器会将inline函数粘贴到调用点处,省去了原本函数查找、调用的时间
inline使用原则
要定义一个函数为inline函数,需要满足以下原则:
1)不可包含复杂的结构控制语句,包括循环控制和复杂的条件控制,例如while, switch。
2)不可包含递归函数
inline函数使用无非是平衡“ 函数调用开销 vs 函数执行开销”,所以一个简小的函数要重复调用时,inline函数有一定优势。例如下面的call( )函数。
#include
using namespace std;
inline int call( ){
static int ctr =1;
return ctr ;
}
int main(){
for(int i=0; i<500; i )
cout<
执行过程中将call( )函数粘贴到int main()函数中的调用点“ cout<
很多人可能有疑问,在pc上没有感觉明显速度优势。但是在很多处理器功能很弱的8位、16位的嵌入式系统中,inline函数可以节约非常客观的时间消耗。
inline函数定义在头文件
这不是绝对的,如果很多.cpp都需要这个inline函数,那么理应定义在.h中,方便函数引用、拓展。试想,你也不情愿每个函数文件中都用外部函数调用来解决
extern inline int call( );
不同的是,.h中的普通函数只要函数声明即可。对应到java,可以理解为java中的抽象方法。如声明头文件test.h:
#ifndef test_h_
#define test_h_
bool sort_elem(int &elem);
inline int call( ){
static int ctr =1;
return ctr ;
}
#endif /* test_h_ */
inline函数不仅仅要声明,还需要定义。这样才容易被多个文件存取。