Can we overload a function based on only whether a parameter is a value or a reference?

陌路散爱 提交于 2019-11-30 20:05:11

Yes, they can be overloaded based on reference or not. That is why it's perfectly fine to have them coexist like that; they are different.

The problem has to do with ambiguity. While f(1) can only be called on one variation, f(i) can be called on both. Neither is preferable, therefore you get an error for ambiguity. If you added a third function, foo (const int&), all calls would be ambiguous. But all are still overloads of each other, and non-conflicting.

I agree it's strange to be able to have three overloads of a function, and be able to directly call none. Perhaps someone else has more to add.

a1ex07

You can call each method:

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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!