菜鸟笔记
提升您的技术认知

C++ inline关键字

C的延续

C++是一门承上启下的编程语言,没有写class他就是C语言,这也导致了很多编译器既支持C++也支持C。inline关键字其实更多地出现在C语言当中,因为很多短小的工作函数可以达到快速执行的效果。
将函数声明为inline实际上表示编译器会将inline函数粘贴到调用点处,省去了原本函数查找、调用的时间

inline使用原则

要定义一个函数为inline函数,需要满足以下原则:
1)不可包含复杂的结构控制语句,包括循环控制和复杂的条件控制,例如while, switch。
2)不可包含递归函数
inline函数使用无非是平衡“ 函数调用开销 vs 函数执行开销”,所以一个简小的函数要重复调用时,inline函数有一定优势。例如下面的call( )函数。

#include <iostream>
using namespace std;
inline int call( ){
    static int ctr =1;
    return ctr++;    
}
int main(){
    for(int i=0; i<500; i++)
        cout<<call()<<" "<<endl;
}

执行过程中将call( )函数粘贴到int main()函数中的调用点“ cout<<call( )<<" "<<endl ”处。
很多人可能有疑问,在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函数不仅仅要声明,还需要定义。这样才容易被多个文件存取。