C++内联函数分析

--事物的难度远远低于对事物的恐惧!    

    在C语言中,我们经常看到宏代码块,使用宏代码块的作用是直接将代码直接在编译时就嵌到固定位置,那么有一个问题是:宏是简单粗暴的文本替换,并不会进行任何规则检查,在预处理期就完成宏的替换工作,编译器是不知道宏的存在的。

    鉴于宏代码块的缺陷,C++中引入了内联函数替代宏代码块,使用inline关键字声明内联函数。需要注意的是:inline关键字必须与函数定义结合在一起,否则编译器会直接忽略内联请求

inline void fun()
{
    //your code....
}

以上便是C++中内联函数的定义方式,C++编译器会将内联函数体直接插到程序中调用它的地方,没有普通函数调用是的额外开销(压栈、跳转、返回等),同时也能对内联函数的参数、等规则进行检查,这弥补了宏代码块的缺陷。

    有一点需要注意的是:inline关键字只是请求C++编译器将这个函数当成内联函数,按照内联方式去编译,但是请求不一定成功,也就是即使用了inline关键字,但依旧是普通函数,依旧在使用时调用,有栈的开销等等。

    但是在现在的C++编译器能够进行编译优化,一些函数即使没有inline声明,也可能被内联编译;如果 想要强制内联,可以采用如下的方式:
    -g++ : __attribute__((always_inline))   void fun(){}

    -MSVC : __forceinline  void fun(){}

C++中inline内联编译的限制:
    -不能存在任何形式的循环语句
    -不能存在过多的条件判断语句
    -函数体不能过于庞大
    -不能对函数进行取址操作
    -函数内联声明必须在调用语句之前

总而言之:内联函数不能过于复杂

总结:
    -C++中可以通过inline声明内联函数
    -编译器直接将内联函数体扩展到函数调用的地方
    -inline只是一个请求,是否成功得看编译器允不允许内联
    -内联函数弥补了宏代码块不进行规则检查的缺陷,同时也省去了函数调用时压栈、跳转和返回等开销

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值