C++几种函数(内联函数,缺省函数,函数重载,函数模板)

1.内联函数

在c++中,如果函数的函数体比较小,就可以直接将函数体直接放到定义的地方,减少函数调用,读起来也方便。但是,如果调用函数的调用次数过多,也就是代码复用率太高了,这样虽然效率比较高,但是代码可读性太低了。为了协调好函数效率与可读性的问题,c++提供了内联函数的方法;就是在定义函数之前加上inline,这样函数就会在调用出展开,可读性高并且效率也高!

看个例子:

 

这个很简单的程序可以看出来,在执行函数的时候在反汇编中可以看到,调用了该函数;

但是如果我们将该函数定义为内联函数:

 

 

可以看到,并没有去调用函数,而是直接把函数体放过来。

需要注意的是,如果函数体过大或者说函数是递归函数,那么即使使用inline定义,函数体也不会在调用地方展开。可以说:inline只是程序设计者对编译器的一个建议。 

2.缺省函数

c++允许函数又缺省值,就是在定义函数的函数对形参进行赋值:

可以看到,c的那行是错误的,因为我们只给出了一个缺省值,所以最少得有一个实参传递进来。

需要注意的是,如果有很多形参具有缺省值,就需要由右向左依次给缺省值:

这种赋值时允许的

可以看到这种编译是不会通过的。

 形参的默认值也可以是一个函数的调用,那么在函数调用的时候就会调用该函数。

习惯性的将形参的默认值在函数的声明时定义,那么在定义函数的时候就不需要指定缺省参数的大小了

 

3.函数重载

c++允许函数的重载。

重载指的是,俩个函数名相同,但是由于形参表不相同所以函数不相同。参数表的不相同可以指的是参数列表个数不同,或者类型不同:

可以看到,前三个函数都可以被看为函数的重载,如果说给的是add('a','g'),那么就调用第三个函数;如果是add(2,3)那么就调用第二个函数。第四个函数不能重载的原因是,他和第三个函数的形参表相同,只有返回类型不同。这样你在调用的时候编译器就无法分辨我们需要使用哪个函数,所以就会报错。 

const如果修饰形参修饰的是引用或者指针,那么对于不加const来说,也是一种函数的重载。

这会被认为是函数的重复定义:
 

而换成指针或者引用就没问题了。

函数的缺省值会影响函数的重载,会有二义性:

 

编译器是无法知道我们需要使用哪个函数的。

为什么c语言不允许函数的重载呢?

因为c++的名字粉碎(名字修饰):

而c的函数名字修饰就很简单,没有和形参表扯上关系,所以c的函数不能进行重载!

 

 

4.函数模板

函数模板可以定义一个适用类型广泛的函数:

先看定义:

Max就是一个通用的函数 

该过程称为模板实参推演,根据模板函数推演出的类型构造出适合当前类型的函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g162512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值