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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage