跳到主要内容

C++ 编程中的默认参数

提示
  1. 默认参数的概念:在C++编程中,可以为函数参数提供默认值。如果在调用函数时没有传递参数,则使用默认参数。
  2. 默认参数的工作原理:当使用默认参数的函数被调用时,如果没有传递相应的参数,就会使用其默认值;如果传递了参数,则默认参数被覆盖。
  3. 默认参数使用注意事项:一旦为某个参数提供了默认值,其后的所有参数也必须有默认值。如果在函数定义中指定默认参数,那么函数定义必须在函数调用之前。

在 C++ 编程中,我们可以为函数参数提供默认值。

如果带有默认参数的函数在调用时没有传递参数,则使用默认参数。

然而,如果在调用函数时传递了参数,则默认参数被忽略。

默认参数的工作原理

C++ 编程中默认参数的工作原理

我们可以从上图中理解默认参数的工作原理:

  1. 当调用 temp() 时,函数使用两个默认参数。

  2. 当调用 temp(6) 时,第一个参数变为 6,第二个参数使用默认值。

  3. 当调用 temp(6, -2.3) 时,两个默认参数被覆盖,得到 i = 6f = -2.3

  4. 当传递 temp(3.4) 时,函数的行为是不可预期的,因为不能在不传递第一个参数的情况下传递第二个参数。

    因此,3.4 被作为第一个参数传递。由于第一个参数被定义为 int,实际传递的值是 3

示例:默认参数

#include <iostream>
using namespace std;

// 定义默认参数
void display(char = '*', int = 3);

int main() {
int count = 5;

cout << "没有传递参数: ";
// *, 3 将作为参数
display();

cout << "传递了第一个参数: ";
// #, 3 将作为参数
display('#');

cout << "两个参数都传递了: ";
// $, 5 将作为参数
display('$', count);

return 0;
}

void display(char c, int count) {
for(int i = 1; i <= count; ++i)
{
cout << c;
}
cout << endl;
}

输出

没有传递参数: ***
传递了第一个参数: ###
两个参数都传递了: $$$$$

这个程序的工作原理如下:

  1. 调用 display() 时没有传递任何参数。在这种情况下,display() 使用两个默认参数 c = '*'n = 1
  2. 调用 display('#') 时只传递了一个参数。在这种情况下,第一个参数变为 '#'。第二个默认参数 n = 1 保留。
  3. 调用 display('#', count) 时传递了两个参数。在这种情况下,不使用默认参数。

我们也可以在函数定义中直接定义默认参数。下面的程序与上面的程序等效。

#include <iostream>
using namespace std;

// 定义默认参数
void display(char c = '*', int count = 3) {
for(int i = 1; i <= count; ++i) {
cout << c;
}
cout << endl;
}

int main() {
int count = 5;

cout << "没有传递参数: ";
// *, 3 将作为参数
display();

cout << "传递了第一个参数: ";
// #, 3 将作为参数
display('#');

cout << "两个参数都传递了: ";
// $, 5 将作为参数
display('$', count);

return 0;
}

需要记住的事项

  1. 一旦我们为参数提供了默认值,随后的所有参数也必须有默认值。例如,
// 无效
void add(int a, int b = 3, int c, int d);

// 无效
void add(int a, int b = 3, int c, int d = 4);

// 有效
void add(int a, int c, int b = 3, int d = 4);
  1. 如果我们在函数定义中定义默认参数而不是在函数原型中,则必须在函数调用之前定义该函数。
// 无效代码

int main() {
// 函数调用
display();
}

void display(char c = '*', int count = 5) {
// 代码
}