C++内联函数

C++内联函数

宏和内联

在C语言中,使用宏可以不要普通函数调用代价(传参,函数栈)。宏的实现是在预处理阶段,预处理器使用宏代码直接替换宏调用,合理使用宏仅花费一小部分空间就是可以完成函数的功能,增加了程序的便利性和可读性。
但是,宏还是有很多的缺点:

  • 没带括号发生的边界问题

  • 变量自增自减引发的二义性问题

  • 不利于调试

  • 更重要的一点是C++预处理阶段并不能访问类的成员数据

所以,c++引入了内联函数,内联函数继承了宏的优点,又弥补了宏的一些缺点,内联在debug版本是不展开的,也就是说内联是可调试的。建议在c++中最好用内联替代宏。
关键字inline必须与函数定义体放在一起才能使函数成为内联,仅放在声明并不起作用,内联函数可以在程序中定义不止一次。

类和内联
  • 定义在类声明之中的成员函数将自动的成为内联函数

  • 内联函数最重要的使用之一就是做访问函数

  • 在类声明结束后,其中的内联函数才会被计算,也就是说类中的函数可以直接调用类中后面中的函数
内联和编译器
  • 内联函数参与编译,所以会进行类型检测

  • 对于任何函数,编译器在他的符号表里放入函数类型(函数名,参数类型,返回类型),当编译器分许内联函数和内联函数体没有错误时,将对应的函数体代码也放入符号表,代码以源程序的的形式存放还是以编译过的汇编指令形式存放取决于编译器,然后进行类型检测和转换,假如符合,进行代码替换,假如是成员函数,this就会被放入合适的地方

内联只是建议性的
  • inline只是起建议作用,如果函数太过复杂(代码庞大,有循环,递归等),编译器就会像对非内联函数,根据内联函数定义和为函数建立存储空间

  • 假如要隐式的或者显式的取函数的地址,编译器不能执行内联,倘若这些地址并没有使用时,那编译器仍可能产生内联代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值