内联函数
在C中,我们经常把一些短并执行频繁的计算写成 宏函数(带参数的宏),可以用来提高效率,但有其缺点:1.难以发现错误 2.不具有作用域,不能作为类的成员函数。
内联函数既可以继承宏函数的效率,又可以避免这些缺点。
宏函数与内联函数的比较:宏函数是完全的直接替换,内联函数不是,它能保证代码的完整性
内联函数:是一个真正的函数,具有普通函数的所有行为,在普通函数之前加个inline就行,任何在类中定义的函数都是内联函数,一般不用加inline。内联函数的替换是在编译阶段发生的,不是像宏一样在预处理阶段。
函数的默认参数
C++在声明函数原型的时候可以为一个或者多个参数指定默认的参数值,当函数调用时如果没有传递该参数值,编译器会自动用默认值代替。
//函数的默认参数,指定a的默认值为10,b的默认值为20
int my_add(int a=10 ,int b=20)
{
return a+b;
}
int main()
{
cout<<"my_add="<<my_add()<<endl;//结果为30;
cout<<"my_add="<<my_add(100)<<;//结果为120,a=100,b=20,b启动默认值
cout<<"my_add="<<my_add(100,300)<<;//结果为400,a=100,b=300,a,b启动默认值
}
注意:
1.函数的参数是从左往右的,如果函数的某一个参数设置了默认参数,那么这个参数之后的所有参数都必须设置默认参数。
int func(int a,int b=10,int c)//默认参数设置少了,报错
{
****
}
int func(int a,int b=10,int c=20)//设置正确,不报错
{
****
}
2.如果函数声明和定义分开写时,函数声明和函数定义能同时设置默认参数,但推荐在函数声明处设置默认参数。声明和定义在两个不同文件时,函数定义处的默认参数是无效的,声明处的参数才有效。
函数的占位参数
C++在声明函数时,可以设置占位参数,占位参数只有参数类型,而没有形参名。
void func(int x,int y ,int)//第三个参数为占位参数,所以记得给他传参
{
*****
}