# C++ 编程默认参数（参数）

> 原文： [https://www.programiz.com/cpp-programming/default-argument](https://www.programiz.com/cpp-programming/default-argument)

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

在 C++ 编程中，我们可以为[函数](/cpp-programming/function)参数提供默认值。

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

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

* * *

## 默认参数的工作原理

![Working of Default Arguments in C++](img/b43f95c19060db7022b764e5481db7e5.png "Working of Default Arguments in C++")

How default arguments work in C++



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

1.  调用`temp()`时，该功能使用两个默认参数。
2.  调用`temp(6)`时，第一个参数变为`10`，而第二个参数使用默认值。
3.  调用`temp(6, -2.3)`时，两个默认参数都将被覆盖，从而导致`i = 6`和`f = -2.3`。
4.  传递`temp(3.4)`时，该函数的行为异常，因为如果不传递第一个参数，则无法传递第二个参数。

    因此，`3.4`作为第一个参数传递。 由于第一个参数已定义为`int`，因此实际传递的值为`3`。

* * *

## 示例：默认参数

```cpp
#include <iostream>
using namespace std;

// defining the default arguments
void display(char = '*', int = 3);

int main() {
    int count = 5;

    cout << "No argument passed: ";
    // *, 3 will be parameters
    display(); 

    cout << "First argument passed: ";
     // #, 3 will be parameters
    display('#'); 

    cout << "Both arguments passed: ";
    // $, 5 will be parameters
    display('$', count); 

    return 0;
}

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

**输出**

```cpp
No argument passed: ***
First argument passed: ###
Both arguments passed: $$$$$
```

该程序的工作原理如下：

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

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

```cpp
#include <iostream>
using namespace std;

// defining the default arguments
void display(char c = '*', int count = 3) {
    for(int i = 1; i <= count; ++i) {
        cout << c;
    }
    cout << endl;
}

int main() {
    int count = 5;

    cout << "No argument passed: ";
    // *, 3 will be parameters
    display(); 

    cout << "First argument passed: ";
     // #, 3 will be parameters
    display('#'); 

    cout << "Both argument passed: ";
    // $, 5 will be parameters
    display('$', count); 

    return 0;
}
```

* * *

## 要记住的事情

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);
    ```

2.  如果我们在函数定义中定义默认参数而不是函数原型，则必须在函数调用之前定义函数。

    ```cpp
    // Invalid code

    int main() {
        // function call
        display();
    }

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