Chciałem tylko dodać, dlaczego ten idiom jest w ogóle używany, co wyglądało jak duch pierwotnego pytania.
Ten idiom jest używany w wielu klasach bibliotek STD, w których zaimplementowano zamianę. Od http://www.cplusplus.com/reference/algorithm/swap/:
Wiele komponentów biblioteki standardowej (w std) wezwanie zamiany w niewykwalifikowanego sposób, aby umożliwić niestandardowe przeciążeń dla nie-podstawowych typów nazywać zamiast typowego wersji: przeciążeń zwyczaj zamiany zadeklarowane w tym samym obszarze nazw co typ, dla którego są one dostarczane są wybierane za pomocą wyszukiwania zależnego od argumentów w tej ogólnej wersji .
Zatem celem stosowania bez zastrzeżeń „swap”, aby zamienić zmienne w funkcji, którą opisana jest tak, że ADL może znaleźć niestandardowych funkcji swapowych dla tych klas (jeśli istnieją gdzie indziej).
Ponieważ te niestandardowe klasy nie istnieją w klasie, do której się odwołujesz (mSize i mArray to odpowiednio std :: size_t i int *, w oryginalnym przykładzie), a std :: swap działa po prostu W porządku, autor dodał komentarz, że nie było to konieczne w tym przypadku, ale dobre praktyki. Miałby te same wyniki, gdyby wyraźnie nazwał to std :: swap, co podkreślono w poprzedniej odpowiedzi.
Dlaczego to dobra praktyka? Ponieważ jeśli masz jako członków instancje klas, dla których zdefiniowano niestandardową zamianę, chcesz, aby zachowanie było takie: sprawdź niestandardową funkcję wymiany ... jeśli istnieje, użyj jej, jeśli nie istnieje, użyj biblioteki standardowej Funkcje. W przypadkach, w których nie ma dostępnych niestandardowych funkcji zamiany, użytkownik chce uzyskać domyślną domyślną dla prostej implementacji std :: swap opisanej w powyższym łączu. Stąd "używanie", aby wprowadzić zamianę wbudowanych typów w przestrzeń nazw. Ale te będą wypróbowane na końcu.
Zobacz także: https://stackoverflow.com/a/2684544/2012659
Jeśli z jakiegoś powodu nienawidzisz „za pomocą std :: swap”, przypuszczam, że można teoretycznie rozwiązać ten ręcznie przez jawne wywołanie std :: swap dla wszystko, czego chcesz swap przy użyciu std :: swap i użycie nieuwarunkowanej wymiany dla każdej niestandardowej wymiany, którą znasz jest zdefiniowana (nadal można znaleźć przy użyciu ADL). Ale jest to podatne na błędy ... jeśli nie stworzyłeś tych klas, możesz nie wiedzieć, czy istnieje dla nich niestandardowa wymiana. A przełączanie pomiędzy std :: swap i swap powoduje, że kod jest mylący. Lepiej pozwolić, aby kompilator sobie z tym poradził.
http://stackoverflow.com/q/4782692/19093 –