我得到的回答NO!因为按值传递和通过引用传递看起来与调用者。

然而,下面的代码编译右

class A {

public:
void f(int i) {}    

void f(int& i) {}
};

但是,当我尝试使用它,没有编译错误。

int main () {

   A a;
   int i = 9;
   int& j = i;
   a.f(1);
   a.f(i);
   a.f(j);
  return 0;
}

为什么不编译器即使不知道它是将要使用禁用它?

有帮助吗?

解决方案

是,它们可以基于参考或不超载。这就是为什么它是完美的罚款让他们共存这样的;它们是不同的。

在问题具有模糊性的事情。虽然f(1)只能在一个变化中被调用,f(i)上都可以调用。也不是最好,所以你得到一个错误的不确定性。如果添加了第三个功能,foo (const int&)全部接听的话会有歧义。但是,所有仍然过载彼此的,和非冲突。

我同意这是奇怪的是能够有一个函数的三个重载,并能够直接调用无。也许别人有更多的补充。

其他提示

可以调用每个方法:

void (A::*t)(int& ) =&A::f;
A a;
int i = 9;
int& j = i;   
a.f(1); //  f(int i)
(a.*t)(i); // f(int& i)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top