参数的隐式默认值?

问题描述:

如果我有这个函数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) 
{ 
} 
+0

是的,谢谢,那正是我所害怕的。我发现这种“隐式默认参数值”的发生让我颇感沮丧。原来这篇文章甚至没有被编译。 ;) – user1130005 2012-04-19 11:24:43

声明这样说:

void fun (Foo t1, Bar t2, bool t3 = false) 
{...} 

当你把一个=和一个值,该参数获得了一个默认值,如果没有提供。但是,您必须从参数列表的右侧开始使用它们。