1、内联函数
为了减少函数调用的开销,引入了内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不是产生调用函数的语句。
inline int max(int a,int b)
{
if(a>b)return a;
return b;
}
2、函数重载
一个或者多个函数,名字相同,然而参数个数或者参数类型不同,这叫做函数的重载。
编译器根据调用语句的实参的个数和类型判断具体调用的是哪个函数。
(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.4,2.5);//调用(1)
max(2,3);//调用(2)
max(1,2,3);//调用(3)
max(2,2.4);//error,二义性,编译器不知道调用哪个函数;如果没有第一函数,则参数会进行转化调用第二个函数;如果没有第二个函数,则调用第一个函数;
int max(int a,int b=2)
{
cout<<a<<b<<endl;
}
int max(int a)
{
cout<<a<<endl;
}
int main()
{
max(1)
return 0;
}
[Error] call of overloaded 'max(int)' is ambiguous
这时编译器不知道调用哪个函数,因此报错。
Note:python 中没有重载函数
3、函数的缺省值
在c++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值。
void fun(int a,int b=2,int c=3)
fun(10);//等效于fun(10,2,3)
fun(10,10);//等效于fun(10,10,3)
fun(10, ,10);//不行,只能最右边的连续若干个参数缺省
python中:
def fun(a,b=2,c=3):
print a
print b
print c
fun(10)
fun(1,b=2)
前两个正确,下边一个错误,错误原因:
non-keyword arg after keyword arg
fun(1,b=2,4)