Freigeben über


Einfache Zuweisung (C++)

Der einfache Zuweisungsoperator (=) bewirkt, dass der Wert des zweiten Operanden in dem durch den ersten Operanden angegebenen Objekt gespeichert wird. Wenn beide Objekte arithmetische Typen sind, wird der rechte Operand in den Typ des linken Operanden konvertiert, bevor der Wert gespeichert wird.

Objekte vom Typ "const" und "volatile" können L-Werten von Typen zugewiesen werden, die nur "volatile" oder die weder "const" noch "volatile" sind.

Die Zuweisung zu Objekten des Klassentyps (Struktur-, Union- und Klassentypen) wird durch eine Funktion mit dem Namen "operator=" ausgeführt. Das Standardverhalten dieser Operatorfunktion besteht darin, eine bitweise Kopie auszuführen. Allerdings kann dieses Verhalten mithilfe von überladenen Operatoren geändert werden. (Weitere Informationen finden Sie unter Überladene Operatoren.)

Ein Objekt einer eindeutig abgeleiteten Klasse von einer angegebenen Basisklasse kann einem Objekt der Basisklasse zugewiesen werden. Umgekehrt gilt dies nicht, da eine implizite Konvertierung von einer abgeleiteten Klasse in eine Basisklasse vorliegt, jedoch nicht von der Basisklasse in die abgeleitete Klasse. Beispiel:

// 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
}

Zuweisungen zu Verweistypen verhalten sich so, als ob die Zuweisung zu dem Objekt ausgeführt würde, auf das der Verweis zeigt.

Für Klassentypobjekte unterscheidet sich die Zuweisung von der Initialisierung. Um zu sehen, wie unterschiedlich Zuweisung und Initialisierung sein können, betrachten Sie diesen Code:

UserType1 A;
UserType2 B = A;

Der vorhergehende Code zeigt einen Initialisierer; er ruft den Konstruktor für UserType2 auf, der ein Argument vom Typ UserType1 akzeptiert. Mit dem Code

UserType1 A;
UserType2 B;

B = A;

kann die Zuweisungsanweisung

B = A; 

eine der folgenden Auswirkungen haben:

  • Aufruf der Funktion "operator=" für UserType2, vorausgesetzt "operator=" wird mit einem UserType1-Argument bereitgestellt.

  • Aufruf der expliziten Konvertierungsfunktion UserType1::operator UserType2, wenn eine solche Funktion vorhanden ist.

  • Aufruf eines Konstruktors UserType2::UserType2, sofern ein solcher Konstruktor vorhanden ist, der ein UserType1-Argument akzeptiert und das Ergebnis kopiert.

Siehe auch

Referenz

Ausdrücke mit binären Operatoren