C ++中的默认参数

默认参数是在函数定义中传递的参数,如果没有提供参数,则在函数调用时,编译器将使用该参数。

下面是默认参数的示例:

#include <bits/stdc++.h>

using namespace std;

void print(int a, int b = 1, int c = 2, int d = 3)

{

    cout << "//a: " << a << endl;

    cout << "//b:" << b << endl;

    cout << "//c:" << c << endl;

    cout << "//d:" << d << endl;

}

int main(){

    int a = 12, b = 13, c = 14, d = 15;

 

    //第一个函数调用

    cout << "only argument a passed\n";

    print(a);

 

    //第二个函数调用

    cout << "only arguments a,b passed\n";

    print(a, b);

 

    //第三函数调用

    cout << "only arguments a,b,c passed\n";

    print(a, b, c);

 

    //第四函数调用

    cout << "All arguments a,b,c,d passed\n";

    print(a, b, c, d);

    return 0;

}

输出:

only argument a passed

//a: 12

//b: 1

//c: 2

//d: 3

only arguments a,b passed

//a: 12

//b: 13

//c: 2

//d: 3

only arguments a,b,c passed

//a: 12

//b: 13

//c: 14

//d: 3

All arguments a,b,c,d passed

//a: 12

//b: 13

//c: 14

//d: 15

在上面的示例中,我们使用了默认参数concept。这是运算符重载的一个实例,其中解析是在编译时完成的。

因此,在第一个函数调用的情况下,我们仅在调用函数中传递了一个参数a,而其他参数bcd为其默认值。

在第二个函数调用的情况下,我们仅在调用函数中传递了两个参数ab,而其他参数cd则采用了其默认值。

在第三个函数调用的情况下,我们在调用函数中传递了三个参数abc,而另一个参数d为其默认值。

在第四个函数调用的情况下,我们在调用函数中传递了所有四个参数,因此不采用默认参数值。

但是在定义默认参数的情况下,我们需要遵循一些规则,以便编译器不会发现函数重载是模棱两可的。

1)在函数定义中,如果我们声明一个变量的默认参数,则此后的所有变量都需要具有默认参数。

如下所示,它不是使用默认参数的有效函数定义,并且会引发编译错误,

int func(int a, int b=0, int c)

//这将引发错误,因为b已分配默认参数 

//值,但c尚未出现,尽管c在b之后。

//应该这样声明:

int func(int a, int c ,int b=0)

2)如果在调用函数时提供了参数值,则将复制参数的默认值

3)不应导致歧义,否则会导致编译错误。

以上是 C ++中的默认参数 的全部内容, 来源链接: utcz.com/z/316002.html

回到顶部