C++中的默认参数是指在函数声明中给某个形参一个默认值,当在调用函数时这个参数没有被传值,那么就会使用默认参数,否则就使用传进来的值。默认参数可以在函数声明的时候指定。
一、默认参数的基本用法
定义一个带有默认参数的函数可以像下面这样:
#include<iostream>
using namespace std;
// 默认值在声明中指定
int add(int x = 0, int y = 0)
{
return x + y;
}
int main()
{
cout << add() << endl; // 输出 0
cout << add(1) << endl; // 输出 1
cout << add(2, 3) << endl; // 输出 5
return 0;
}
在上面的代码中,我们定义了一个函数add(),它带有两个参数x和y,其中x和y的默认值均为0。在main函数中,我们分别调用add()函数,第一个调用没有传递任何参数,因此使用x和y的默认值0,第二个调用只传递了一个参数1,因此使用x的值1和y的默认值0,第三个调用传递了两个参数2和3,因此使用了x的值2和y的值3。
二、默认参数的注意事项
下面是一些需要注意的默认参数使用情况:
1. 参数顺序
当函数有多个参数时,以默认参数结尾的函数声明形参列表中的参数可以被省略,但是用户必须以与声明相同的顺序提供非默认实参。
#include<iostream>
using namespace std;
// 不能把y放在x前面
int add(int x, int y = 0)
{
return x + y;
}
int main()
{
cout << add(1) << endl; // 输出 1
cout << add(2, 3) << endl; // 输出 5
return 0;
}
在上面的代码中,我们可以看到,如果在函数声明中把默认参数放在非默认参数之前,编译器将会报错。
2. 多个默认参数的函数
如果一个函数有多个参数需要设置默认值时,我们可以这样来实现:
#include<iostream>
using namespace std;
int add(int x, int y = 0, int z = 0)
{
return x + y + z;
}
int main()
{
cout << add() << endl; // 输出 0
cout << add(1) << endl; // 输出 1
cout << add(2, 3) << endl; // 输出 5
cout << add(4, 5, 6) << endl; // 输出 15
return 0;
}
上面的代码可看到,我们在函数声明中分别为三个参数设置默认值,当我们调用函数时,可以选择传递一个,两个或者三个参数。如果只传递了一个参数,那么前两个参数将会使用默认值,如果传递了两个参数,那么第三个参数仍然使用默认值。
3. 默认参数可以是常量表达式
默认参数可以是任何完整类型的表达式,包括常量表达式。这意味着您可以使用任何表达式(包括使用常量表达式)来设置默认参数。
#include<iostream>
using namespace std;
#define DEFAULT_Y 10
int add(int x, int y = DEFAULT_Y);
int main()
{
cout << add(1) << endl; // 输出 11
return 0;
}
int add(int x, int y)
{
return x + y;
}
4. 默认参数不能在声明和定义处同时出现
默认参数需要在声明或定义中指定,但不能同时出现。在声明中指定的默认参数不允许出现在函数定义中,并且反之亦然。
下面这段代码是错误的:
// 错误示例,同一参数不能同时在声明和定义中指定默认值
#include<iostream>
using namespace std;
int add(int x = 10, int y = 20);
int main()
{
cout << add() << endl;
return 0;
}
int add(int x = 0, int y = 0)
{
return x + y;
}
三、结语
这篇文章详细介绍了C++中默认参数的基本用法,以及需要注意的几个问题。在编写大型程序和代码转换时,这些默认值的灵活性非常有用。同时注意,不要滥用默认参数,以免使代码变得更加难以理解。