默认参数(Default Arguments)
在 C++ 中,可以在函数声明或定义时为形参指定默认值。调用该函数时,如果没有为该形参提供实参,就会自动使用默认值;否则,使用用户传入的值。这样既可以简化函数调用,也能减少重载函数的数量。
一、基本用法
#include <iostream>
using namespace std;
// 带默认参数的函数
void func(int n, float b = 1.2f, char c = '@') {
cout << n << ", " << b << ", " << c << endl;
}
int main() {
func(10, 3.5f, '#'); // 输出:10, 3.5, #
func(20, 9.8f); // 等价于 func(20, 9.8f, '@'),输出:20, 9.8, @
func(30); // 等价于 func(30, 1.2f, '@'),输出:30, 1.2, @
return 0;
}
- func(10, 3.5f, '#'):为所有参数传值。
- func(20, 9.8f):省略了最后一个参数,使用默认值
c = '@' 。
- func(30):省略了两个参数,依次使用默认值
b = 1.2f, c = '@' 。
二、默认值的灵活指定
除了字面常量,也可以使用表达式或变量:
float d = 10.8f;
void func2(int n, float b = d + 2.9f, char c = '@') {
cout << n << ", " << b << ", " << c << endl;
}
注意:表达式会在编译时(若为常量表达式)或运行时(若依赖变量)进行求值。
三、默认参数的语法规则
-
只能出现在参数列表末尾
一旦给某个参数指定了默认值,它右侧的所有参数都必须也有默认值。
// 合法
void f(int a, int b = 10, int c = 20);
void g(int a, int b, int c = 20);
// 非法
void h(int a, int b = 10, int c, int d = 20); // c 无默认值
void j(int a, int b = 10, int c = 20, int d); // d 无默认值
- 匹配顺序从左到右
调用时,编译器依次将实参与形参匹配,遇到省略就补默认值。
四、使用场景与优势
- 减少函数重载
通过默认参数,可以用一个函数覆盖多种调用场景,避免编写多个同名重载。
- 提高代码可读性
调用端只需关注常用参数,省略不常变动的参数,使代码更简洁。
- 灵活配置
对于一些可选配置项,默认参数提供了良好的扩展性。
五、小结与后续
- 默认参数只是一种语法糖,不会改变函数的本质调用过程。
- 在函数声明或定义处都可以指定默认参数,但要避免重复或冲突。
- 下节我们将深入讨论:“到底在声明中还是定义中指定默认参数”。
|