2012-01-23 10 views
7

Un C++ wiki book riferisce aChi ha coniato il termine operatore di assegnazione unificato (o unificante)?

... In C++ 0x, tale operatore di assegnazione è noto come ununificante assegnazione operatore perché elimina la necessità di scrivere due diversi operatori di assegnazione. ..

per un operatore di assegnazione che prende il tipo di classe per valore:

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

Ho provato a cercare su Google il termine, ma non sembra essere molto diffuso.

Da dove viene?

+0

[Questa domanda] (http://stackoverflow.com/questions/7458110/c-unified-assignment-operator-move-semantics) menziona un video di Channel 9 su Perfect Forwarding, non ho intenzione di guardarlo per scoprire, ma forse lo vuoi. Se proviene da Channel 9, forse MS è la fonte del termine. – Leigh

risposta

4

Sembra essere in riferimento a il unification che si svolge in sistemi di tipo formale. Il pensiero è che se i valori r- e l- possono essere portati allo stesso tipo (unificati) solo con determinate sostituzioni legali, allora l'incarico è ben formato.

Wikipedia sostiene che l'idea è stata data inizialmente attenzione significativa (e possibilmente il suo nome) per John Alan Robinson.

1

Non sono sicuro di chi lo abbia scritto ma il libro wiki è sbagliato. La parola "unificare" appare esattamente zero volte nel C++ 0x "standard" (dovresti usare la frase "C++ 11" al giorno d'oggi, è stata approvata nell'agosto 2011).

Il termine corretto è copia elisione. Da C++ 0x (n3242, l'ultimo che ho può ottenere senza sborsare soldi), sezione 12.8 Copying and moving class objects, /34:

Quando vengono soddisfatti determinati criteri, un'implementazione è permesso di omettere la costruzione di copia/spostamento di un oggetto classe, anche se il costruttore copia/sposta e/o il distruttore per l'oggetto hanno effetti collaterali.

In questi casi, l'implementazione considera l'origine e il target dell'operazione di copia/spostamento omessa semplicemente come due diversi modi di riferirsi allo stesso oggetto e la distruzione di tale oggetto avviene in un secondo momento quando i due gli oggetti sarebbero stati distrutti senza l'ottimizzazione.

Questa elisione delle operazioni di copia/spostamento, chiamato copia elisione, è consentito nei seguenti casi (che possono essere combinati per eliminare copie multiple) ...

+0

Ora puoi anche ottenere [N3337] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf), il primo progetto pubblico * dopo * C++ 11 era pubblicato. (Nessuna modifica a questa sezione però). –

+0

Bene, l'affermazione "X è noto come Y" sarebbe vera se un numero ragionevole di persone usasse * Y * per riferirsi a X, anche se non era un termine definito dallo standard, o addirittura se fosse inaccurato. –

+0

Questi sono due cose diverse. Copia elision è uno dei vantaggi del compito unificatore (anche io penso che sia applicato prima del C++ 11 ...). –

Problemi correlati