Gründe für den Member Function Swap

enn ein Klassentyp in der Standardbibliothek über einen speziellen Auslagerungsalgorithmus verfügt, hat er eine Mitgliedsfunktioswap und eine freie Funktionswap das leitet einfach an die Mitgliedsfunktion weiter. Ich verstehe die Gründe für beide nicht ganz (und damit für die Code-Vervielfältigung), aber nicht nur für die freie Funktion. Beachten Sie, dass ich, wenn ich die freie Funktion sage, die spezialisierte freie Tauschfunktion und nicht das generische @ meinstd::swap Funktionsvorlage. Solch eine spezialisierte Funktion kann privilegierten Zugriff auf die relevante Klasse haben, indem sie mit ihr befreundet ist.

Ich habe zwei Punkte zu unterstützen, nur die freie Funktion anstelle der Mitgliedsfunktion zu verlassen. Erstens bildet es eine allgemeinere Swap-Schnittstelle, um das Schreiben allgemeiner Algorithmen zu erleichtern, da Nicht-Klassentypen wie Arrays keine Member-Funktionen haben können. Zweitens ist Swap eine binäre Operation mit zwei Operanden und zeigt ein Gefühl der Symmetrie. Es ist natürlicher und intuitiver, Swap mit einer freien Funktion durchzuführen, die für keinen der Operanden eine Verzerrung aufweist. Aus diesem Grund habe ich mich bei der Verwendung der Member-Funktion immer etwas komisch gefühltswap als ob ich eine Operation ausführen würde, die auf dem aufrufenden Objekt basiert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage