1.函数参数的默认值
- C++中可以在函数声明时为参数提供—个默认值
- 当函数调用时没有提供参数的值,则使用默认值
#include <stdio.h>
int mul(int x = 3);
int main(int argc, char *argv[])
{
printf("mul(2) = %d\n", mul(2)); // 4
printf("mul(-2) = %d\n", mul(-2)); // 4
printf("mul() = %d\n", mul()); // 9
printf("Press enter to continue ...");
getchar();
return 0;
}
int mul(int x)
{
return x * x;
}
- 函数定义中是否可以出现参数的默认值? 可以
- 当函数声明和定义中的参数默认值不同时会发生什么?会出错 error : 重定义默认参数,所以函数定义和声明中不能同时出现默认参数
- 函数默认参数的规则
- 只有参数列表后面部分的参数才可以提供默认参数值
- 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
#include <stdio.h>
int add(int a, int b = 0, int c = 0, int d = 0) // 只有参数列表后面部分的参数才可以提供默认参数值,
{
return a + b + c ;
}
int main(int argc, char *argv[])
{
printf("add(2) = %d\n", add(2)); // 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
printf("add(1, 2) = %d\n", add(1, 2));
printf("add(1, 2, 3) = %d\n", add(1, 2, 3));
printf("Press enter to continue ...");
getchar();
return 0;
}
- 运行结果
2.函数占位参数
- 在C++中可以为函数提供占位参数
- 占位参数只有参数类型声明,而没有参数名声明
- 一般情况下,在函数体内部无法使用占位参数
#include <stdio.h>
int func(int a, int b, int) // 占位参数只有参数类型声明,而没有参数名声明,一般情况下,在函数体内部无法使用占位参数
{
return a + b;
}
int main(int argc, char *argv[])
{
printf("func(1, 2, 3) = %d\n", func(1, 2, 3)); // 3
printf("Press enter to continue ...");
getchar();
return 0;
}
- 函数占位参数的意义
- 占位参数与默认参数洁合起来使用
- 兼容C语言程序中可能出现的不规范写法
#include <stdio.h>
int func(int a, int b, int = 0) // 可以将占位参数与默认参数结合起来使用
{
return a + b;
}
int main(int argc, char *argv[])
{
printf("func(1, 2) = %d\n", func(1, 2)); // 3
printf("Press enter to continue ...");
getchar();
return 0;
}
3.小结
- C++中支持函数参数的默认值;
- 如果函数调用时没有提供参数值,则使用默认值;
- 只有参数列表后面部分的参数才可以提供默认参数;
- 函数调用时使用了默认值,则后续参数必须使用默认值;
- C++中支持占位参数,用于兼容C语言中的不规范写法;