原文: https://www.programiz.com/cpp-programming/default-argument

在本教程中,我们将通过示例学习 C++ 默认参数及其使用。

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

如果在不传递参数的情况下调用具有默认参数的函数,则使用默认参数。

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


默认参数的工作原理

C   编程默认参数(参数) - 图1

C++ 中的默认参数如何工作

我们可以从上图了解默认参数的工作方式:

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

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

  3. 调用temp(6, -2.3)时,两个默认参数都将被覆盖,从而导致i = 6f = -2.3

  4. 传递temp(3.4)时,该函数的行为异常,因为如果不传递第一个参数,则无法传递第二个参数。
    因此,3.4作为第一个参数传递。 由于第一个参数已定义为int,因此实际传递的值为3


示例:默认参数

  1. #include <iostream>
  2. using namespace std;
  3. // defining the default arguments
  4. void display(char = '*', int = 3);
  5. int main() {
  6. int count = 5;
  7. cout << "No argument passed: ";
  8. // *, 3 will be parameters
  9. display();
  10. cout << "First argument passed: ";
  11. // #, 3 will be parameters
  12. display('#');
  13. cout << "Both arguments passed: ";
  14. // $, 5 will be parameters
  15. display('$', count);
  16. return 0;
  17. }
  18. void display(char c, int count) {
  19. for(int i = 1; i <= count; ++i)
  20. {
  21. cout << c;
  22. }
  23. cout << endl;
  24. }

输出

  1. No argument passed: ***
  2. First argument passed: ###
  3. Both arguments passed: $$$$$

该程序的工作原理如下:

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

我们还可以在函数定义本身中定义默认参数。 下面的程序等同于上面的程序。

  1. #include <iostream>
  2. using namespace std;
  3. // defining the default arguments
  4. void display(char c = '*', int count = 3) {
  5. for(int i = 1; i <= count; ++i) {
  6. cout << c;
  7. }
  8. cout << endl;
  9. }
  10. int main() {
  11. int count = 5;
  12. cout << "No argument passed: ";
  13. // *, 3 will be parameters
  14. display();
  15. cout << "First argument passed: ";
  16. // #, 3 will be parameters
  17. display('#');
  18. cout << "Both argument passed: ";
  19. // $, 5 will be parameters
  20. display('$', count);
  21. return 0;
  22. }

要记住的事情

  1. 一旦为参数提供默认值,所有后续参数也必须具有默认值。 例如 ```cpp // Invalid void add(int a, int b = 3, int c, int d);

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

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

  1. 2.
  2. 如果我们在函数定义中定义默认参数而不是函数原型,则必须在函数调用之前定义函数。
  3. ```cpp
  4. // Invalid code
  5. int main() {
  6. // function call
  7. display();
  8. }
  9. void display(char c = '*', int count = 5) {
  10. // code
  11. }