关于c ++函数重载的困惑

时间:2012-06-03 00:04:59

标签: c++ function overloading default arguments

我在c ++中通过编译以下代码来尝试默认参数值和函数重载,我对输出感到惊讶:

Line 19: error: call of overloaded 'add()' is ambiguous

我编译的代码是:

#include <iostream>

using namespace std;

void add(int a=1, int b=1){

cout<<a+b;
}

void add(){

int a =2, b=2;
cout<<a+b;
}


int main(){

add();

return 0;
}

任何解释为什么它含糊不清? Thx提前。

2 个答案:

答案 0 :(得分:8)

因为两个签名都与呼叫匹配。

add();

可以解释为add(1,1)add()。当你写void add(int a=1, int b=1)时,你告诉编译器 - “听老兄,如果我拨打add没有参数,我希望你将它们默认为1

最重要的是,当您在没有参数的情况下致电add()时,会发生什么?

  • 如果您希望打印2,请删除不带参数的版本。

  • 如果您希望打印4,请从第一个版本中删除默认参数。

答案 1 :(得分:2)

void add(int a, int b);
void add();

您不应该提供ab默认值。使用默认值时,编译器无法知道对add()的调用是否应使用第一个或第二个函数。

您是否需要提供ab默认值?