Un'assegnazione semplice (C++)
L'operatore di assegnazione semplice (=) determina il valore del secondo operando a essere archiviato nell'oggetto specificato dal primo operando.Se entrambi gli oggetti sono i tipi aritmetici, l'operando verrà convertito nel tipo di sinistra, prima di archiviare il valore.
Gli oggetti di tipo costante e i tipi volatili possono essere assegnati i valori l-value solo dei tipi unicamente volatili o che non sono const né volatile.
L'assegnazione di oggetti di tipo classe (struttura, unione e tipi di classe) viene eseguita da una funzione denominata operator=.Il comportamento predefinito di questa funzione di operatore è di eseguire una copia bit per bit; tuttavia, questo comportamento può essere modificato mediante gli operatori di overload.(Vedere operatori di overload per ulteriori informazioni.)
Un oggetto affatto inequivocabilmente di classe derivata da una classe base specificata può essere assegnato a un oggetto della classe base.Non è vero il contrario poiché è una conversione implicita dalla classe derivata a classe base ma non da classe di base per la classe derivata.Di seguito è riportato un esempio:
// expre_SimpleAssignment.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class ABase
{
public:
ABase() { cout << "constructing ABase\n"; }
};
class ADerived : public ABase
{
public:
ADerived() { cout << "constructing ADerived\n"; }
};
int main()
{
ABase aBase;
ADerived aDerived;
aBase = aDerived; // OK
aDerived = aBase; // C2679
}
Le assegnazioni ai tipi di riferimento si comportano come se l'assegnazione stesse effettuata all'oggetto di cui punta il riferimento.
Per gli oggetti del classe-tipo, l'assegnazione è diversa dall'inizializzazione.Per illustrare come assegnazione e l'inizializzazione diversi possono essere, si consideri il codice
UserType1 A;
UserType2 B = A;
Il codice precedente viene illustrato un inizializzatore; chiama il costruttore per UserType2 accetta un argomento di tipo UserType1.Dato il codice
UserType1 A;
UserType2 B;
B = A;
l'istruzione di assegnazione
B = A;
può assumere uno di effetti seguenti:
chiamare il operator= di funzione per UserType2, se il operator= viene fornito di un oggetto UserType1 argomento.
chiamare la funzione esplicita di conversione UserType1::operator UserType2, se tale funzione esiste.
chiamare un costruttore UserType2::UserType2, se tale costruttore esiste, il che accetta un oggetto UserType1 argomento e copia il risultato.