内联函数(inline)

1、什么是内联函数?

    内联函数的实质就是任然是函数,只不过是在定义普通函数的时候,添加了一个inline关键字声明。

2、内联函数有什么用?

    C语言或者C++中,在调用函数的时候,都会将函数的参数、内部变量、返回值都会用栈来保存,如果一个函数反复频繁的被调用,那么这个压栈出栈的过程就会被重复调用,而压栈出栈都是会耗费时间的,所以出现了内联函数:以空间换时间,也就是说内联函数在语法上和函数是一模一样的,只不过是在调用的时候,直接将函数体和函数调用语句替换,这样就不牵涉到函数调用过程了。

3、内联函数怎么用?

    只能在函数定义的位置添加inline关键字声明,不能将inline添加到函数的声明中。

    一般最好将内联函数定义在.h头文件中,这和宏定义类似,只要使用到内联函数的时候,包含下头文件就可以省去再次定义的麻烦了。

4、内联函数注意事项?

    内敛函数只是对编译器的建议,也就是说到底能不能以内联函数的方法使用该函数,关键看编译器采纳不采纳将这个inline定义的函数按照内敛函数的形式编译的建议,那么编译器采纳建议的标准就是:只要能够提高程序执行效率就可以,那为了满足这个要求,需要注意:

    (1)内联函数结构不能太复杂

        因为内联函数是以牺牲内存来换取程序执行时间的缩短(省去调用函数过程,直接拷贝代码),如果函数体太庞大,这样编译成的程序指令就比较冗余,浪费内存。

    (2)不能出现复杂的结构控制语句例如while、switch、if、for,同时内联函数不能为递归。

        这个其实是内联函数规定的,内联函数出现的目的就是为了节省函数执行时间(效率).

        不是内联函数中不能有循环语句,而是当内联函数中出现了复杂的逻辑控制语句后,编译器会不再认为它是一个内联函数。

也就是说,当内联函数中实现过于复杂时,编译器会将它作为一个普通函数处理。

        这是由内联函数的特殊性所决定的,由于内联是调用处展开的方式,所以编译器认为只有足够简单的函数才可以具有该特性,复杂函数编译器会放弃内联特性。

5、内联函数和宏定义区别?

     内联函数的实质是函数,宏定义的实质是字符串替换。虽然宏定义和内联函数都是替换但是还是有些区别的:

    (1)宏定义的替换发生在预处理阶段,内联函数的替换是在编译阶段

    (2)宏定义在不好直观阅读代码,而且语法上容易出现错误(少符号、传递表达式),但是内联函数则是完全按照函数规则

6、总结

    一句话,内联函数起始就是在编译的时候建议编译器在遇见inline声明的函数的时候,先看看该函数是否满足内联函数的规则要求:不包含复杂逻辑结构(switch、if、while、for)和庞大代码的函数体,满足的话就将其按照内联函数方式编译(不调用函数,而是直接替换函数体内代码),不满足就按照普通函数编译。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值