内联函数也称内嵌函数,它主要是解决程序的运行效率。
  函数调用需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些工作都需要一些时间开销。
       C++中的内联函数定义很简单,只要在普通的函数前加一个关键字inline就可以了,除此之外和普通函数表面上没有什么区别(包括函数的调用方式),因为这样,所以在很多的C++初学者(甚至一些有C++编程经验的人) 看来,内联只是一个概念而已,其实这是对内联函数没有彻底的认识,下面我们就来谈谈内联函数和普通 函数以及和宏的区别,相信读完下面的部分,你对这三者一定有了很好的理解。
       内联函数和普通函数最大的区别在于内部的实现方面,而不是表面形式,我们知道普通函数在被调用时,系统首先要 跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个拷贝; 而内联函数则不需要进行一个寻址的过程,当执行到内联函数时,此函数展开(很类似宏的使用),如果在 N处调用了此内联函数,则此函数就会有N个代码段的拷贝。
       从内联函数的调用来看,它因为少了一个寻址过程而提高了代码的执行效率,但是这是以空间的代价来换取的。
       声明为内联的函数,其代码段不能太长,过长,一些编译器则视为普通 函数(究竟函数体多长就超过了限制,这个好象没有规定,这个也确实不好规定,个人觉得应该视函数体的逻辑而定)。
      下面是内联函数的声明举例:
     inline void SetVal(int a){ m_b = a};
     inline int GetVal(){ return m_b};
     从上面的例子可以看出,内联函数的声明和实现通常都会在一个文件当中(一般放在.h中就可以了)。
     下面我们再来说说内联函数与宏的区别。很多的资料上,在谈到内联函数时就说,内联函数和宏很类似,但是类似归类似,毕竟我们不能把这两者互换使用。
     这两者的相似之处在于执行时编译器对其的处理,会将其代码展开,执行完后继续下面的处理。不同之处在于宏是简单的文本替换,它不能返回值,也没有一般函数参数的概念;而内联函数则具备了普通函数的特征,如参数列表,返回值等。下面我们举个例子说明:
     1.#define COUNT(X)(X * X)  // 一个计算乘积的宏
     2.inline int count(int x){return x*x} //一个计算乘积的内联函数
    
     printf(COUNT(3)); // 结果为 COUNT(3) ( 3 * 3) = 9;
     printf(count(3)); // 结果为 count(3){return 3*3 }=9;
    
     上面的例子好象不足以说明两者的区别,我们把上面的例子的调用改改,再看看结果
    
     printf(COUNT(2+3)); //结果为COUNT(2+3)(2+3 * 2+3) = 11
     printf(count(2+3)); //结果为count(2+3){return 5*5 ;} = 25;
    
     如果宏要达到乘积为25的结果,应该这样写:
     #define COUNT(X)((X)*(X))
     对应到上面的例子就是 #define COUNT(2+3)((2+3)*(2+3))
 
注意:
  内联函数中, 不能含有复杂的结构控制语句,如switch和while。如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码。
  另外,递归函数(自己调用自己的函数)是不能被用来做内联函数的。
  内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。