Justificación del intercambio de funciones miembro

En la biblioteca estándar, si un tipo de clase tiene un algoritmo de intercambio especializado, tendrá una función miembroswap y una función libreswap eso simplemente reenvía a la función miembro. No entiendo la razón detrás de tener ambos (y, por lo tanto, la duplicación de código), pero no solo la función libre. Tenga en cuenta que, cuando digo la función libre, me refiero a la función especializada de intercambio gratuito, no a la genéricastd::swap plantilla de función Tal función especializada puede tener acceso privilegiado a la clase relevante al ser amiga de ella.

Tengo dos puntos que apoyar simplemente dejando la función libre en lugar de la función miembro. Primero, forma una interfaz de intercambio más genérica para facilitar la escritura de algoritmos genéricos, ya que los tipos que no son de clase, como las matrices, no pueden tener funciones miembro. Segundo, el intercambio es una operación binaria que involucra dos operandos y demuestra un sentido de simetría. Es más natural e intuitivo realizar el intercambio utilizando una función libre que no tiene sesgo en ninguno de los operandos. Por esta razón, siempre me he sentido algo extraño al usar la función miembroswap como si estuviera realizando alguna operación basada en el objeto que invoca.

Respuestas a la pregunta(1)

Su respuesta a la pregunta