public función de miembro de intercambio de amigos
En la hermosa respuesta a la copiar-e-intercambiar-idioma hay un fragmento de código que necesito un poco de ayuda:
class dumb_array
{
public:
// ...
friend void swap(dumb_array& first, dumb_array& second) // nothrow
{
using std::swap;
swap(first.mSize, second.mSize);
swap(first.mArray, second.mArray);
}
// ...
};
y agrega una nota
Hay otras afirmaciones de que deberíamos especializarnos en std :: swap para nuestro tipo, proporcionar un intercambio en su clase junto a un intercambio de función libre, etc. Pero todo esto es innecesario: cualquier uso adecuado del intercambio se realizará a través de un no calificado llame, y nuestra función se encontrará a través de ADL. Una función servirá.
Confriend
Estoy un poco en términos "hostiles", debo admitirlo. Entonces, mis preguntas principales son:
swap
static? Obviamente no usa ninguna variable miembro. "Cualquier uso adecuado del intercambio descubrirá el intercambio a través de ADL"? ADL buscará los espacios de nombres, ¿verdad? ¿Pero también se ve dentro de las clases? O es aquí dondefriend
¿viene enPreguntas secundarias:
Con C ++ 11, ¿debo marcar miswap
s connoexcept
?Con C ++ 11 y su rango-para, debería colocarfriend iter begin()
yfriend iter end()
de la misma manera dentro de la clase? Pienso que elfriend
no es necesario aquí, ¿verdad?