1.函数参数的默认值
C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供参数的值,则使用默认值。
如果再函数定义也提供一个不同的默认值。
#include <stdio.h>
int mul(int x = 0);
int main(int argc, char *argv[])
{
printf("%d\n", mul());
printf("%d\n", mul(-1));
printf("%d\n", mul(2));
return 0;
}
int mul(int x)
{
return x * x;
}
运行结果
0
1
4
小结:以上程序在c的编译器是报错的,这正表明了c++在默认参数的优化;
如果在函数定义的时候也给出了参数的默认值,那么c++编译器也会报错,所以我们只是需要早函数申明的时候说明就可以了。(并且只能是在申明的时候给出初始默认值)
2.函数默认参数的规则
函数调用时使用了默认值,则后续参数必须使用默认值(调用,匹配从左向右)
实例
#include <stdio.h>
int add(int x, int y = 0, int z = 0);
int main(int argc, char *argv[])
{
printf("%d\n", add(1));
printf("%d\n", add(1, 2));
printf("%d\n", add(1, 2, 3));
return 0;
}
int add(int x, int y, int z)
{
return x + y + z;
}
运行结果
1
3
6
下图是实现只给y提供默认值,y只能放在最后。(第一张图报错了,原因是因为咋们申明的时候对第三个参数赋值,调用的时候自然要为前面的都赋值了。)
3.函数占位参数
在C++中可以为函数提供占位参数
占位参数只有参数类型声明,而没有参数名声明
一般情况下,在函数体内部无法使用占位参数
小结:c语言会给默认参数(这样做是不规范的),所以上图是不等价的。而c++中是等价的。(在之前有讲过)。所以占位参数就是这样使用的。
看看怎么解决如下的问题。
看看c的效果:
#include <stdio.h>
void func()
{
}
int main(int argc, char *argv[])
{
func();
func(1,2);
return 0;
}
看看c++的效果:
#include <stdio.h>
void func(int = 0, int = 0 )
{
}
int main(int argc, char *argv[])
{
func();
func(1,2);
return 0;
}
小结:结合默认值和默认参数的使用。(就是为了便利于c到c++的移植。)
小结
C++中支持函数参数的默认值
如果函数调用时没有提供参数值,则使用默认值
参数的默认值必须从右向左提供
函数调用时使用了默认值,则后续参数必须使用默认值
C++中支持占位参数,用于兼容C语言中的不规范写法