在c++中,如何在传递一些参数的同时将其他参数保留为默认值?



我相信这里已经有答案了,但是搜索一直返回PHP, c#和Java。我是专门问c++的。

如果我有一个函数,它有五个参数,它们都有默认值,但是我想显式地调用它,给第三个参数一个值,我传递什么给第一个和第二个参数?(我知道func(,,"Third")不起作用,func(thirdArg:"Third")也不起作用)

在c++中,你必须指定所有的参数到默认值,所以它必须是func("First","Second","Third")

c++还要求你在参数列表的"末尾"有默认值,所以你不能做像func(defaulted, not-defaulted)

这样的事情
这两个规则都与c++的重载解析规则相关联。

您可以为Java构造函数中的默认参数制定类似的解决方案。

但是我不认为这在c++中是一个好的实践,特别是对于函数,因为我上面已经说过,默认参数的位置通常在非默认参数之后。

使用函数重载实现的解决方案:

void Foo(int default, int nodefault){
    ...
}
void Foo(int nodefault){
    Foo(10, nodefault); //10 - is default option
}
int main(){
    Foo(3); //calls Foo(10, 3);
}

这可不是小事。也许你可以尝试boost参数。你可以这样传递参数

func(third_="third")

Please check =>

http://www.boost.org/doc/libs/1_56_0/libs/parameter/doc/html/index.html named-function-parameters

语言中没有直接支持。然而,c++程序员经常使用的一种习惯用法是命名参数(Named Parameter)习惯用法,以代替缺少类似bash的位置参数。

假设你的函数是类的成员方法,你可以很容易地应用这个习惯用法:

基本上,您有方法(可能是访问器)来修改对象的状态。每个方法返回一个对this的非const引用,允许方法链接。

例子:

class Person{
public:
    Person& setAge(int agep) { age = agep ; return *this; }
    Person& setWeight(double weightp) { weight = weightp ; return *this; }
    Person& setName(const std::string& namep) { name = namep ; return *this; }
private:
    int age = 0;
    double weight = 0.0;
    std::string name;
};
int main(){
    Person p;
    p.setAge(42).setName("Kurt"); // set age and name, but not weight
}

最新更新