Betrachten Sie folgenden Code ein:Ist das Überladen der Funktion durch Referenz zulässig, wenn keine Mehrdeutigkeit besteht?
#include <iostream>
void foo(int m);
void foo(int &k);
int main()
{
foo(5); // ok, because there is no ambiguity
int m = 5;
//foo(m); // compile-time error, because of ambiguity
foo(m + 0); // ok, because it's an expression of type int and not object's lvalue
}
void foo(int m)
{
std::cout << "by value\n";
}
void foo(int &k)
{
std::cout << "by reference\n";
}
Ich verstehe, dass es Mehrdeutigkeit für foo(m)
einführt, aber dies erlaubt, wenn die Expression von Typ int
(oder einem anderen, den int
umgewandelt werden kann)?
Ich habe versucht, einige Standard-Referenz zu finden, aber ohne Glück.
Haftungsausschluss: Beachten Sie, dass es nicht von Function Overloading Based on Value vs. Const Reference Duplikat ist. Die const
Referenzen sind unterschiedlich, da sie rvalues zugeordnet werden können, im Gegensatz zu "gewöhnlichen", nicht const
Referenzen.
'm' ist auch ein Ausdruck des Typs' int'. –
mögliches Duplikat von [Funktionsüberladung basierend auf Wert gegenüber Const-Referenz] (http://stackoverflow.com/questions/5465293/function-overloading-based-on-value-vs-const-reference) –