C++中的内联函数(inline)与宏定义(#define)的学习

C++中的内联函数(inline)与宏定义(#define)的学习

一、内联函数(inline)简介

      内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。

二、内联函数和宏的区别

      宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。换句话说,调用内联函数和调用正规函数是等价的,差别仅仅是更快。你可以像调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

三、使用内联函数需要注意的地方:

      1、inline函数不要超过10行代码,且不能包含循环、switch、if语句.

      2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,推荐把inline函数定义在头文件中。

      3、不要过度使用inline函数定义,尤其对大函数来说.当我们过度使用inline函数,会造成程序文件变大,性能降低。内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。程序文件变大是肯定的,但为什么性能会降低呢,inline不是为了提高性能吗?使用的方式不正确性能不能提高,反而会下降。现在的CPU上都有cache,紧凑的代码在chache中保存的时间更长,这样cache命中的机会更高。

四、实例学习

   1、define_inline.cpp代码

#include <iostream>
using namespace std; 
#include <stdio.h>  
#define define_absolute(i) \
         ( (i) >= 0 ? (i) : -(i) )

inline int  function_inline(int i) 
{
	return i>0?i:-i;
}
void main()  
{   int j,m;
    char c=0;
	printf("define and inline\n"); 
	j=100;
	m=function_inline(j++) ;
	printf("function_inline(j++)=%d  j=%d\n",m,j); 
	j=100;
    m=define_absolute(j++);
	printf("define_absolute(j)=%d  j=%d\n",m,j); 

	j=100;
    m=define_absolute(++j);
	printf("define_absolute(j)=%d  j=%d\n",m,j);

    function_inline(c); 

}  

2、测试结果,看下面的运行结果的不一样,可以大概了解宏和inline两者的不一样了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值