我们可以重载基于函数的参数只能是值还是引用?
-
20-09-2019 - |
题
我得到的回答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)
不隶属于 StackOverflow