01 函数的默认参数
在c++的函数中,函数的形式参数列表是可以由默认数值的。
语法:返回值类型 函数名称 (参数 = 默认值) {}
。
举个例子:
之前我们写一个函数是这样写的。
#include <iostream>
using namespace std;
int func1(int a, int b, int c);
int main()
{
cout << func1(10, 20, 30) << endl;
return 0;
}
int func1(int a, int b, int c)
{
int temp = a + b + c;
return temp;
}
这是一个传入三个数字,函数返回这三个数值相加的结果。在这里,调用这个函数的时候,必须要传入三个参数,否则会出现报错。
但是我们现在可以给函数的形式参数设置初始值,比如下面:(运行:打印70
)
#include <iostream>
using namespace std;
int func1(int a, int b = 20, int c = 30);
int main()
{
cout << func1(10, 30) << endl;
return 0;
}
int func1(int a, int b, int c)
{
int temp = a + b + c;
return temp;
}
这里,在调用函数的时候还是传入a
b
c
。如果没有传入参数,那么就会自动使用默认值。如果有传入的参数,那么就使用传入的参数。
注意事项:
-
如果某一个地方已经有默认参数,那么从这个地方往后,从左向右都必须要有默认值。
比如这样写就是正确的:
int fun2(int a, int b = 0, int c = 0);
但是这样写就是错误的:
//int fun2(int a, int b = 0, int c);
-
如果函数的声明有了默认参数,则函数的定义里面则不可以出现默认参数。
比如这样写就是正确的
int fun2(int a, int b = 0, int c = 0); int fun2(int a, int b int c) { int temp = a + b + c; return temp; }
但是这样写就是错误的:虽然不会出现红线,但是在程序运行的时候就会会出现问题。
//int fun2(int a, int b = 0, int c = 0); //int fun2(int a, int b = 0, int c = 0) //{ // int temp = a + b + c; // return temp; //}
也就是:声明和定义里面,只能有一处有默认参数。比如这样也是正确的
int fun2(int a, int b, int c); int fun2(int a, int b = 0, int c = 0) { int temp = a + b + c; return temp; }
- 总结:函数可以在形式参数中设置默认参数。在形参列表中,从首个设置默认值的形参开始,后续所有形参都必须设置初始值。并且,在函数定义和声明中,有、且只有一处可以设置初始值。
函数的声明和定义中,只需要一处有默认参数,但是,形式参数列表是必须要的。
:-)