2012-01-23 19 views
7

Un C++ wiki book se refiere a¿Quién acuñó el término operador de asignación unificada (o unificadora)?

... En C++ 0x, un operador tal asignación se conoce como un unificador operador de asignación, ya que elimina la necesidad de escribir dos operadores de asignación diferentes. ..

para un operador de asignación que toma su tipo de clase por valor:

String & operator = (String s) // the pass-by-value parameter serves as a temporary 
{ 
    s.swap (*this); // Non-throwing swap 
    return *this; 
} 

Traté de buscar en Google el término, pero no parece ser de uso generalizado.

¿De dónde viene?

+0

[Esta pregunta] (http://stackoverflow.com/questions/7458110/c-unified-assignment-operator-move-semantics) menciona un video de Channel 9 en Perfect Forwarding, no voy a verlo para descubrir, pero tal vez quieras. Si es del Canal 9, posiblemente MS sea la fuente del término. – Leigh

Respuesta

4

Parece ser en referencia a el unification que tiene lugar en sistemas de tipo formal. El pensamiento es si los valores ryl pueden ser llevados al mismo tipo (unificado) mediante solo ciertas sustituciones legales, entonces la asignación está bien formada.

Wikipedia afirma que la idea recibió atención significativa (y posiblemente su nombre) primero por John Alan Robinson.

1

No estoy seguro de quién lo formuló, pero el libro wiki está equivocado. La palabra "unificación" aparece exactamente cero veces en el C++ 0x "estándar" (realmente debería estar usando la frase "C++ 11" hoy en día, fue aprobada en agosto de 2011).

El término correcto es copia elision. Desde C++ 0x (n3242, lo último que se puede conseguir sin desembolsar dinero), la sección 12.8 Copying and moving class objects, /34:

Cuando se cumplen ciertos criterios, se permite una implementación de omitir la construcción copiar/mover de un objeto de clase, incluso si el constructor de copia/movimiento y/o el destructor para el objeto tienen efectos secundarios.

En tales casos, la implementación trata la fuente y el destino de la operación de copiar/mover omitida como simplemente dos formas diferentes de referirse al mismo objeto, y la destrucción de ese objeto ocurre en el momento posterior cuando los dos los objetos habrían sido destruidos sin la optimización.

Esta elisión de las operaciones de copiar/mover, llamados copia elisión, está permitido en las siguientes circunstancias (que pueden combinarse para eliminar múltiples copias) ...

+0

Ahora también puede obtener [N3337] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf), el primer borrador público * después de * C++ 11 fue publicado. (Sin cambios a esta sección) –

+0

Bueno, la afirmación "X se conoce como Y" sería cierta si un número razonable de personas usaba * Y * para referirse a X, incluso si no era un término definido por el estándar, o incluso si era inexacto. –

+0

Esas son dos cosas diferentes. La elisión de copia es una de las ventajas de la asignación unificadora (también creo que se aplicó antes de C++ 11 también ...). –

Cuestiones relacionadas