默认形参与内联函数

默认形参

1、什么是默认形参

在C++中可以给函数的参数设置默认值,当函数被调用时如果调用者提供了实参则使用实参调用,如果没有提供则使用默认值调用

2、默认形参要靠右

如果函数有多个参数,并设置了默认形参,要遵循从右往左依次默认形参

3、只能在函数声明中设置默认形参

如果函数声明与定义是分开实现,只能在函数声明中设置默认形参,否则语法错误

4、默认形参可能会影响函数重载

如果对函数进行了重载,又设置了默认形参,调用时可能会有冲突和歧义,调用失败

因此对于重载过的函数设置默认形参时一定要谨慎

内联函数

1、普通函数

普通函数会被编译成二进制指令存储在代码段中,调用语句中会生成一条跳转指令,当程序运行到调用语句时,会跳转该函数在代码段中对应的位置执行,执行结束会返回

2、什么是内联函数

内联函数也会被翻译成二进制指令,但调用语句不会生成跳转指令,而是直接把内联函数的二进制指令进行替换,这样就没有跳转和返回,而是直接执行二进制指令,这种称为内联函数

3、显式内联和隐式内联

①显式内联:

在函数的返回值前加 inline 该函数就以内联函数的机制调用

②隐式内联:

在结构、联合、类中的成员函数会自动被当做内联函数处理

注意:如果在结构、联合、类中声明成员函数,但是在外面定义,则不会当做内联函数处理

注意:函数是否被内联由编译器以及它的优化等级决定,加 inline 只是有可能影响它的决定

注意:g++默认优化等级 -O -O1 下所有的内联函数都会当成普通函数处理;在-O2 -O3的优化级别下,甚至普通函数都可能会被当做内联函数的处理

注意:C99也支持 inline

4、内联的适用条件

优点:节约了函数传参、跳转、返回的时间,提高代码的运行速度

缺点:当被多个位置调用时,那么二进制指令会被拷贝多份,产生了冗余,导致可执行文件明显增加

适用条件:

①适合内容简单且同一位置频繁调用的函数

②不适合内容多、且多个位置、较少调用的函数,因为节约的时间还弥补不过牺牲的空间

③带有递归属性的函数无法内联,编译器会自动忽略

5、内联函数和宏函数的相同点和不同点

相同点:都是采用以空间换时间的策略提高程序的运行速度,减少函数调用跳转的耗时

不同点:

①宏函数不是真正的函数,只是语句替换,不会对参数进行类型检查、没有返回值、安全性低

②内联函数是真正的函数、严格检查参数类型、有返回值、安全性高

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值