首页 > 编程笔记
C++函数的默认参数详解
和 C 语言相比,C++ 允许为函数的参数设置默认值,这样做的好处是,调用函数时不必总是提供所有的参数,大大提高了函数的灵活性。
为函数指定默认实参的方法类似于初始化一个变量,例如:
指定了默认参数后,调用函数时就可以省略对应的实参了,例如调用声明的 func():
例如,下面声明 func() 函数的写法是错误的:
举个简单的例子:
修改上面的程序:
为函数指定默认实参的方法类似于初始化一个变量,例如:
//带默认参数的函数 void func(int n, float b = 1.2, char c = '@');在上述 func() 函数的声明中,参数 n 是一个普通的参数,而参数 b 和 c 是具有默认实参的参数。
指定了默认参数后,调用函数时就可以省略对应的实参了,例如调用声明的 func():
func(5); // 参数 n 的值为 5,b 的值为 1.2,c 的值为'@' func(5, 3); // 参数 n 的值为 5,b 的值为 3,c 的值为 '@' func(5, 3, 'm'); // 参数 n 的值为 5,b 的值为 3,c 的值为 'm'C++ 规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
例如,下面声明 func() 函数的写法是错误的:
void func(int n, float b = 1.2, char c); void func(int n = 0, float b, char c = '@');
指定默认参数的位置
默认参数可以在函数的声明处指定,也可以在函数的定义处指定。C++ 规定,一个参数只能在一个文件中被指定一次默认实参,但可以在多次声明中依次向前指定默认参数。举个简单的例子:
#include <iostream> void func(int a, int b = 10, int c = 36); int main() { func(99); return 0; } void func(int a, int b = 10, int c = 36) { std::cout << a << ", " << b << ", " << c << std::endl; }这段代码在编译时会报错,错误信息表明不能在函数定义和函数声明中同时指定默认参数。
修改上面的程序:
#include <iostream> void func(int a, int b, int c = 36); void func(int a, int b = 10, int c); int main() { func(99); return 0; } void func(int a, int b, int c) { std::cout << a << ", " << b << ", " << c << std::endl; }这种声明方式是正确的。第一次声明时为 c 指定了默认值,第二次声明时为 b 指定了默认值;第二次声明是添加默认参数。需要提醒的是,第二次声明时不能再次给 c 指定默认参数,否则就是重复声明同一个默认参数。