c ++中的默认参数

时间:2012-04-02 09:24:18

标签: c++

请考虑以下事项:

int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);

如果我这样称呼这个函数:

foo( 1 , 2);

编译器如何知道使用哪一个?

4 个答案:

答案 0 :(得分:8)

它不会,因此这个例子不会干净地编译,它会给你一个编译错误 它会给你一个模糊的函数调用错误。

Online Sample:

int foo(int x , int z = 0){return 0;} 
int foo(int x, int y , int z = 0){return 10;}

int main()
{
    foo( 1 , 2); 
    return 0;
}

输出

  

prog.cpp:在函数'int main()'中:
  prog.cpp:6:错误:调用重载'foo(int,int)'是不明确的   prog.cpp:1:注意:候选者是:int foo(int,int)
  prog.cpp:2:注意:int foo(int,int,int)

答案 1 :(得分:5)

它没有,这就是你得到编译器错误的原因。

答案 2 :(得分:4)

这是一个很好的问题。但由于对foo()的暧昧呼吁,它无法编译。您可以通过在函数签名中使用不同的数据类型来消除此歧义。

有关默认参数功能重载的详细信息,请参阅http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Chapter07.html

答案 3 :(得分:2)

编译器将报告不明确的函数重载。因为你无法弄清楚b将调用哪个函数,所以编译器