c++ - ¿Cuál es el punto de iter_swap?
templates namespaces (2)
De los documentos de SGI ( here ):
[1] Estrictamente hablando, iter_swap es redundante. Existe solo por razones técnicas: en algunas circunstancias, algunos compiladores tienen dificultades para realizar la deducción de tipo requerida para interpretar swap (* a, * b).
Me preguntaba, ¿por qué alguien escribiría esto?
std::iter_swap(i, k);
¿en lugar de esto?
std::swap(*i, *k); // saved a few keystrokes!
Luego iter_swap
la implementación de iter_swap
y, por supuesto, solo usa swap
lugar de std::swap
ya que de todos modos ya estamos en el namespace std
de namespace std
. Eso me lleva a la siguiente pregunta:
¿Por qué alguien escribiría esto?
using std::swap;
swap(a, b);
¿en lugar de esto?
std::iter_swap(&a, &b); // saved an entire line of code!
¿Hay alguna diferencia / problema importante que estoy pasando por alto aquí?
Para responder a su segunda pregunta, el using
+ swap
permite al compilador usar funciones de intercambio definidas por el usuario que pueden ser más eficientes que la implementación predeterminada (mediante el uso de ADL). Explicar explícitamente que std::swap
inhibe ADL y cualquier método de intercambio personalizado que haya podido encontrar.
En cuanto a iter_swap
es de suponer que debe usarse en plantillas e indicar claramente intención en lugar de un intercambio que podría indicar que espera un puntero.