参数的隐式默认值?
问题描述:
如果我有这个函数fun(t1,t2,t3),并且我通过fun(v1,v2)调用它,是否有可能获得v3的默认值,虽然它没有被指定是什么?如布尔是假的,指针为null,int为0等或应该提高编译器错误?参数的隐式默认值?
答
如果函数未被重载,将会引发编译器错误。
如果你不能改变的原型,你可以自己重载它:
void fun (bool t1, bool t2)
{
fun (t1,t2, true); //or whatever
}
,或者如果你可以改变它,你可以声明一个默认的参数是这样的:
void fun (bool t1, bool t2, bool t3 = true)
{
}
答
声明这样说:
void fun (Foo t1, Bar t2, bool t3 = false)
{...}
当你把一个=和一个值,该参数获得了一个默认值,如果没有提供。但是,您必须从参数列表的右侧开始使用它们。
是的,谢谢,那正是我所害怕的。我发现这种“隐式默认参数值”的发生让我颇感沮丧。原来这篇文章甚至没有被编译。 ;) – user1130005 2012-04-19 11:24:43