目录
1、函数默认参数
- C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替
- 只有参数列表后面部分的参数才可以提供默认参数值
- 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
示例:
exp-1.cpp
#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));
return 0;
}
运行结果:
2、函数占位参数
在C++中可以为函数提供占位参数
- 占位参数只有参数类型声明,而没有参数名声明
- 一般情况下,在函数体内部无法使用占位参数
- 占位参数也属于参数,因此在调用函数时也必须要提供实参
示例:
exp-2.cpp
#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));
return 0;
}
运行结果:
思考:
C++支持这样的函数占位参数有什么意义?
- 可以将占位参数与默认参数结合起来使用
- 意义
- 为以后程序的扩展留下线索
- 兼容C语言程序中可能出现的不规范写法
示例:
exp-3.cpp
#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));
return 0;
}
Tip:
兼容C的不规范写法,示例:
exp-4.c
#include <stdio.h>
int func()
{
return 1;
}
int main(int argc, char *argv[])
{
printf("func() = %d\n", func());
printf("func(1) = %d\n", func(1));
return 0;
}
在C语言中,以上程序是合法的,能编译通过,但是在C++中,以上程序就变得不合法了,那么改正的方法也很简单,直接使用占位参数+默认参数即可,如下:
#include <stdio.h>
int func(int = 0)
{
return 1;
}
int main(int argc, char *argv[])
{
printf("func() = %d\n", func());
printf("func(1) = %d\n", func(1));
return 0;
}