C语言中,函数在声明与定义时指定形参,在使用时传入与声明、定义时个数、类型相同的参数。但这样函数使用时必须指定所有参数,不利于使用者记忆,并且无默认状态。比如说,创建一个窗体时要么指定窗体的尺寸、颜色等所有参数,要么该函数仅能创建一种窗体。C++中引入默认参数优化该问题。
默认参数形式
如:
#include<iostream>
using namespace std;
#define PI 3.14
//声明部分指定sec_par的默认值为PI,若该形参没有参数传入,则使用PI
float fun(int fir_par,float sec_par=PI);
//声明部分指定后,函数定义不能重复指定默认值
float fun(int fir_par,float sec_par){
return 2*fir_par*sec_par;
}
int main(){
cout<<fun(2)<<'\n'<<fun(2,3)<<endl;
return 0;
}
此处sec_par的参数为3.14,第一个输出的结果即为223.14=12.56。第二个输出为3,因为此时的sec_par为传入的3。
注意事项
声明与定义中仅写一次默认参数
如上例,函数声明与定义时,只能写一次默认参数,一般在函数声明中。若没有函数声明,则写在函数定义中。
默认参数只能在形参中最后的位置
如:
void fun(int a,int b=1);
正确
void fun(int a=1,int b);
错误,因为a参数有默认参数,而b不是,不符合C++语法标准。
void fun(int a=1,int b=1);
正确
函数使用传参时,必须从左到右依次传入,不能跳过某一个参数
如:
void fun(int a,int b=1,int c=1);
下面是函数使用时的几种情况。
fun(1)
fun(1,1)
fun(1,1,1)
正确
fun(1,,2)
错误,如果要将后面的拥有默认参数的参数赋值,必须对该参数及该参数前面的参数都进行赋值。如将c赋值2必须对b进行赋值。不存在直接空着的语法。
即将上述错误的做法改为:
fun(1,1,2)
当函数存在重载时,谨慎使用默认参数
如:
void fun(int a,int b=0);
void fun(int a);
fun(1)
这时如果这样[fun(1)]调用fun()函数,则会出现错误,编译器无法识别调用哪一个fun()函数。