--事物的难度远远低于对事物的恐惧!
在C++中,使用函数的默认参数可以使我们的编程工作在某些方面变得很方便,主要体现在我们调用函数时,如果没有指明函数参数,那么就是使用函数的默认参数,如果提供了函数参数,那么就使用我们提供的函数参数。
需要注意的是:参数的默认值需要在声明函数时就指明,比如我们声明一个函数int fun(int i = 0); 这个样就使的fun函数的参数i的默认值为0,假如我们在函数的声明和定义的地方分别将参数i的默认值设为不同,会怎么样?下边以代码来验证一下:
#include <iostream>
using namespace std;
int fun(int i = 0); //函数声明,指明i默认值为0
int main(int argc, char const *argv[])
{
fun();
return 0;
}
int fun(int i = 12) //函数定义,指明i默认值为
{
cout << i << endl;
}
以上代码,我们在声明和定义时分别讲参数i的默认值设为0和12,下边我们来编译一下:
可以看到,在函数体定义的地方,设置参数默认值,编译器会报错,所以我们要记得:函数参数的默认值必须在函数声明中指定!
言归正传,我们来看看使用带默认值参数的函数,还是一样的代码,只是把函数定义时设的默认值去掉:
#include <iostream>
using namespace std;
int fun(int i = 0); //函数声明,指明i默认值为0
int main(int argc, char const *argv[])
{
fun();
fun(12);
return 0;
}
int fun(int i)
{
cout << i << endl;
}
编译输出一下:
上边只是简单的说下函数参数的默认值,下边我们来看下函数默认参数的规则:
-函数声明时,参数的默认值必须从右向左提供
-函数调用时,如果有一个参数使用了默认值,则这个参数往后的参数必须使用默认值
-函数调用时,参数是从左向右进行匹配的
下边以一个例子来说明:
#include <iostream>
using namespace std;
int fun(int x, int y = 2, int z = 3); //函数声明,指明i默认值为0
int main(int argc, char const *argv[])
{
fun(1); //x=1, y=2, z=3
fun(1, 4); //x=1, y=4, z=3
fun(5,6,7); //x=5, y=6, z=7
return 0;
}
int fun(int x, int y, int z)
{
cout << x << "+" << y << "+" << z << " = " << (x+y+z) << endl;
}
编译输出一下:
以上输出跟我们分析的一样,假如我们fun函数声明改为int fun(int x, int y=2, int z),结果会是什么?请自行实验一下。
说完了函数的参数默认值,现在来谈谈C++中的函数占位参数
-函数的占位参数只有参数类型声明,没有参数名声明
-一般情况下,在函数体内部无法使用占位参数
#include <iostream>
using namespace std;
int fun(int x, int) //第二个int仅仅是占位参数
{
return x;
}
int main(int argc, char const *argv[])
{
fun(1, 4); //编译OK,这个参数4实际是没用的
return 0;
}
函数占位参数的意义
-占位参数与默认参数结合起来使用,例如int fun(int =0, int =0),那么在调用时就可以直接为fun();
-兼容C语言程序中可能出现的不规范写法
总结:
-C++中支持函数参数的默认值
-如果函数调用时没有提供参数值,则使用默认值
-参数的默认值必须从右向左提供
-函数调用时一旦使用的默认值,则后续参数必须使用默认值
-C++中支持占位参数,用于兼容C语言中不规范写法