C++ 基础之函数重载和内联函数

C++ 基础之函数重载和内联函数

C++ 有别于 C ,比较重要的就是其抽象、封装、继承和多态等特性。多态又具体地体现在重载、虚函数和模板等之上。

今天就和大家聊一聊函数重载和内联函数。

函数重载

所谓的函数重载,就是说我们可以定义不同功能的同名函数,它们传入参数类型是不一样的,当你调用这个函数名的时候,编译器会根据你给的参数类型,去匹配和调用相对于的函数。举例如下,
在这里插入图片描述

这里交换两个数的值,使用了引用。所谓引用就是为对象起一个别名。例如变量 b = &a,b 就是 a 的一个引用。对 b 的任何操作等同于对 a 的操作,也就是说,如果你改变了 b 的值,同时 a 的值也会发生改变。一个交换两个值的函数swap(int a, int b),如果将两个值带进去,发生交换的只是形参 a 和 b ,因为函数结束的时候这两个参数的生命周期结束了,换句话说,实参a和b的值并未发生交换。而如果swap(int &a,int &b)则不同,他的参数是 a 和 b 的引用,也就是说函数中的 a 和 b 就是你带入的实参,当函数中的 a 和 b 发生变化时,被引用的值在同时也发生了变化,而不会受到函数声明周期的影响。另一方面,我们也可以通过指针来操作对象,也可以达到交换两个数值的效果。与引用不同的是,引用是不占用存储空间的,而如果用指针指向对象地址的时候会有自己的存储空间。

内联函数

当在一个函数的定义或声明前加上关键字 inline 则就把该函数定义为内联函数,它主要是解决程序的运行效率。

inline int add_int(int x,int y,int z)
{
return x+y+z;
}

计算机在执行一般函数的调用时,无论该函数多么简单或复杂,都要经过参数传递、执行函数体和返回等操作,这些操作都需要一定的时间开销。

若把一个函数定义为内联函数后,在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代码,由此省去函数的调用及相应的保存现场、参数传递和返回操作,从而加快整个程序的执行速度。

有人就问了,既然可以提高效率,为什么不都用内联函数呢?

内联函数虽然具有普通函数的特性,但其处理方
式与普通函数不同,它是将调用表达式用内联函
数体来替换,若内联函数比较大,在程序中就会
有多个程序备份,反而会占用更多的内存空间,
这就失去了内联函数存在的实际意义。因此, C++ 对内联函数的定义有专门限制:

  • 在内联函数内部不允许使用循环语句和开关语句,否则系统将其视为普通函数。
  • 内联函数不能是递归函数。
  • 语句数尽可能少,一般不超过5行。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页