内联函数
函数调用是有时间开销的(在调用函数时,要把参数/返回地址放入栈中,函数执行后还需要入栈取回返回地址)。如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下调用函数所产生的开销就会显得比较大。
为了减少函数调用的开销,引入内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。
定义方式:在函数定义前加 “ 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