内联函数

函数调用是有时间开销的(在调用函数时,要把参数/返回地址放入栈中,函数执行后还需要入栈取回返回地址)。如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下调用函数所产生的开销就会显得比较大。

为了减少函数调用的开销,引入内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。

定义方式:在函数定义前加 “ inline ” 关键字,即可定义内联函数。

inline int Max(int a,int b)
{
    if(a>b)return a;
    return b;
}
  • 好处:可以看到,上面Max( )函数本身的指令就很简单,这样一个Max函数如果反复被执行多次的话,调用Max所产生的开销与函数本身在执行时的开销几乎差不多,因此多次调用就会造成浪费。所以把这种函数写成inline,就能提高这个函数执行的效率。
  • 坏处:可执行程序的体积会增大,函数体里面的指令数量可能比函数调用本身的那些指令要多,这个时候可执行程序的体积有可能就略微增大。

函数重载

定义:一个或多个函数,名字相同,然而参数个数或参数类型(参数表)不同,就叫做函数重载。

  • eg:以下三个函数是重载关系
(1)int Max(double f1,double f2){ }
(2)int Max(int n1,int n2){ }
(3)int Max(int n1,int n2,int n3){ }

Max(3.2,2.5);    //调用(1)
Max(2,4);        //调用(2)
Max(1,2,3);      //调用(3)
Max(3,2.4);      //error,二义性

好处:函数重载使得函数命名变得简单。

原理:编译器根据调用语句中的实参的个数和类型判断应该

课程地址:https://www.coursera.org/learn/cpp-chengxu-sheji/lecture/ieH1V/nei-lian-han-shu-he-zhong-zai-han-shu

2017.06.12

results matching ""

    No results matching ""