如果其中一个具有引用,如何定义具有相同名称和参数的两个函数?

时间:2013-04-09 15:13:51

标签: c++ reference

我有代码:

int SomeClass::sum(int x)
{
    return x+=x;
}

int SomeClass::sum(int & x)
{
    return x+=x;
}

...

int num = 0;
int result = sum(num);

不起作用。我怎样才能使用这两个函数并指出我在使用它们时想要使用哪些函数?

3 个答案:

答案 0 :(得分:2)

您可以提供int&const int&两种不同的重载,这可能会以某种方式满足您的需求......

但是整个代码有点奇怪......在按值获取参数的函数中,你修改它(+=),当它只有< em>读取它return x+x;。在引用引用的重载中,您既修改参数,又返回新值。这有点奇怪。

除此之外,sum对于乘以2的函数来说是一个可怕的名称。

答案 1 :(得分:1)

您无法在C++中拥有此类功能。必须对它们进行不同的命名,例如sumByCopysumByRef。您期望编译器在每个点决定您指的是哪一个?

答案 2 :(得分:0)

你可以用这种方式重载,如果不直接调用它们,它将编译好。但是,当您致电sum(num)时,这会导致歧义。因此,提供函数的重载是没有意义的,因为我们不能直接调用它们。这种超载是没用的,违反了良好的做法。