1. 函数的默认参数
在 C++ 中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供参数的值时,则使用默认值。当函数的声明与实现分开时,函数的默认值只能在函数声明中指定,在函数实现中指定是无效的,且同时指定时会发生编译错误。
- 实验:
// void fun_B(int num = 0); // error: default argument given for parameter 1 of ‘void fun_B(int)’ [-fpermissive]
void fun_B(int num);
void fun_C(int num = 0);
void fun_A(int num = 0)
{
cout << "num = " << num << endl;
}
int main()
{
fun_A(1); // num = 1
fun_A(); // num = 0
fun_B(1); // num = 1
// fun_B(); // error: too few arguments to function ‘void fun_B(int)’
fun_C(1); // num = 1
fun_C(); // num = 0
}
void fun_B(int num = 0)
{
cout << "num = " << num << endl;
}
void fun_C(int num)
{
cout << "num = " << num << endl;
}
2. 多默认参数
函数的多个参数需要设置默认值时,需要遵循以下规则:
- 参数的默认值必须从右向左提供。
- 函数调用时使用了默认值,则后续参数必须使用默认值。
- 实验:
// void fun(int num_A = 0, int num_B, int num_C = 0); // error: default argument missing for parameter 2 of ‘void fun(int, int, int)’
void fun(int num_A, int num_B = 0, int num_C = 0);
int main()
{
// fun(); // error: too few arguments to function ‘void fun(int, int, int)’
fun(1); // num_A = 1, num_B = 0, num_C = 0
fun(1, 2); // num_A = 1, num_B = 2, num_C = 0
fun(1, 2, 3); // num_A = 1, num_B = 2, num_C = 3
// fun(1, ,2); // error: expected primary-expression before ‘,’ token
}
void fun(int num_A, int num_B, int num_C)
{
cout << "num_A = " << num_A
<< ", num_B = " << num_B
<< ", num_C = " << num_C << endl;
}
3. 空参数
在 C 中,void fun(void)
与 void fun()
的含义是不同的,前者表示不接收任何参数,后者表示函数可以接收任意个数的任意参数。
在 C++ 中,参数为空与参数为 void 均表示不接收任何参数。
4. 占位参数
在 C++ 中可以为函数提供占位参数。占位参数只有参数类型声明,而没有参数名声明;在一般情况下,在函数体内部无法使用占位参数。
占位参数的意义在于与默认参数结合起来使用,兼容 C 语言程序中函数参数为空的情形。
- 实验:
void fun(int num_A, int num_B = 0, int = 0);
int main()
{
fun(1); // num_A = 1, num_B = 0
fun(1, 2); // num_A = 1, num_B = 2
fun(1, 2, 3); // num_A = 1, num_B = 2
}
void fun(int num_A, int num_B, int)
{
cout << "num_A = " << num_A
<< ", num_B = " << num_B << endl;
}