函数参数如果有N个,如果都有默认值,要给第N个参数传实参是要给前面的N-1个都传递吗

函数参数如果有N个,如果都有默认值,要给第N个参数传实参是要给前面的N-1个都传递吗?
有没有更科学的方法可以指定传谁,不需要N-1个都传

在C++中,当你为一个函数的多个参数提供默认值时,需要遵循从右到左的规则。这意味着如果你想为第N个参数提供实参,你确实需要为前面的N-1个参数都提供实参。

然而,有一种方法可以帮助你实现按需传递参数,那就是使用重载函数。你可以创建多个具有不同参数数量的函数,这样你就可以为所需的参数提供实参,而不是为所有参数提供实参。

例如,考虑以下函数:

#include <iostream>

void foo(int a = 1, int b = 2, int c = 3) {
    std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl;
}

int main() {
    foo();           // a: 1, b: 2, c: 3
    foo(10);         // a: 10, b: 2, c: 3
    foo(10, 20);     // a: 10, b: 20, c: 3
    foo(10, 20, 30); // a: 10, b: 20, c: 30

    return 0;
}


你可以将其改为使用重载函数:

cpp
Copy code
#include <iostream>

void foo() {
    foo(1, 2, 3);
}

void foo(int a) {
    foo(a, 2, 3);
}

void foo(int a, int b) {
    foo(a, b, 3);
}

void foo(int a, int b, int c) {
    std::cout << "a: " << a << ", b: " << b << ", c: " << c << std::endl;
}

int main() {
    foo();           // a: 1, b: 2, c: 3
    foo(10);         // a: 10, b: 2, c: 3
    foo(10, 20);     // a: 10, b: 20, c: 3
    foo(10, 20, 30); // a: 10, b: 20, c: 30

    return 0;
}

这样,你可以只传递所需的参数。注意,这种方法可能会导致代码冗余,并可能在维护和理解代码时带来额外的负担。但是,这是一种避免为所有参数提供实参的方法。