Name versteckt durch Deklaration
#include <iostream>
struct H
{
void swap(H &rhs);
};
void swap(H &, H &)
{
std::cout << "swap(H &t1, H &t2)" << std::endl;
}
void H::swap(H &rhs)
{
using std::swap;
swap(*this, rhs);
}
int main(void)
{
H a;
H b;
a.swap(b);
}
Und das ist das Ergebnis:
swap(H &t1, H &t2)
Im obigen Code versuche ich, eine Swap-Funktion von @ zu definiereH
. In der Funktionvoid H::swap(H &rhs)
, Ich verwende eine using-Deklaration, um den Namen std :: swap sichtbar zu machen. Wenn es keine using-Deklaration gibt, kann der Code nicht kompiliert werden, da es keine verwendbare Swap-Funktion mit zwei Parametern in der Klasse @ gibH
.
Ich habe hier eine Frage. Meiner Meinung nach, nachdem ich die using-Deklaration verwendet habe -using std::swap
, es macht nur den std :: swap - die Template-Funktion in AWL sichtbar. Also dachte ich, dass der Swap in STL in @ aufgerufen werden sollH::swap()
. Aber das Ergebnis zeigte, dass dasvoid swap(H &t1, H &t2)
wurde stattdessen aufgerufen.
Also hier ist meine Frage:
Warum kann ich swap nicht ohne using-Deklaration aufrufeWarum wird der Swap meiner Definition anstelle des STL-Swaps im @ aufgerufeH::swap
?