我确信这已经在这里得到了回答,但搜索仍然会返回PHP,C#和Java。我特别询问C ++。
如果我有一个带有五个参数且所有参数都有默认值的函数,但是我想明确地给它调用第三个参数的值,那么我将为第一个和第二个参数传递什么? (我知道func(,,"Third")
不起作用,func(thirdArg:"Third")
)
答案 0 :(得分:4)
在C ++中,您必须指定最多默认值的所有参数,因此它必须是func("First","Second","Third")
。
C ++还要求您在'结束时使用默认值。参数列表,所以你不能做func(defaulted, not-defaulted)
这两条规则都与C ++重载决策规则有关。
答案 1 :(得分:2)
您可以在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);
}
答案 2 :(得分:0)
这不重要。可能你可以试试boost参数。你可以传递参数,然后,
func(third_="third")
请检查=>
http://www.boost.org/doc/libs/1_56_0/libs/parameter/doc/html/index.html#named-function-parameters
答案 3 :(得分:0)
该语言没有直接支持。然而,C ++程序员经常用来代替缺少 bash-like位置参数的成语是Named Parameter idiom.。
假设您的函数是类的成员方法,您可以轻松应用此习语:
基本上,您有方法(可能是访问器)来修改对象的状态。每个方法都返回一个非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
}