Assignment operators (Zuweisungsoperatoren)
Syntax
expression
assignment-operator
expression
assignment-operator
: einer von
=
*=
/=
%=
+=
-=
<<=
>>=
&=
^=
|=
Hinweise
Zuweisungsoperatoren speichern einen Wert in dem Objekt, das durch den linken Operanden angegeben wird. Es gibt zwei Arten von Zuordnungsvorgängen:
Einfache Zuweisung, wobei Sie den Wert des zweiten Operanden in dem Objekt speichern, das durch den ersten Operanden angegeben wird.
Zusammengesetzte Zuweisung, wobei vor dem Speichern des Ergebnisses ein arithmetischer, Verschiebe- oder bitweiser Vorgang ausgeführt wird.
Alle Zuweisungsoperatoren in der folgenden Tabelle, mit Ausnahme des Operators =
, sind Operatoren für zusammengesetzte Zuweisungen.
Tabelle mit Zuordnungsoperatoren
Operator | Bedeutung |
---|---|
= |
Speichern Sie den Wert des zweiten Operanden in dem Objekt, das durch den ersten Operanden angegeben wird (einfache Zuweisung). |
*= |
Multiplizieren Sie den Wert des ersten Operanden mit dem Wert des zweiten Operanden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
/= |
Dividieren Sie den Wert des ersten Operanden durch den Wert des zweiten Operanden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
%= |
Errechnen Sie den Modul des ersten Operanden, der vom Wert des zweiten Operanden angegeben wird. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
+= |
Addieren Sie den Wert des zweiten Operanden zu dem Wert des ersten Operanden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
-= |
Subtrahieren Sie den Wert des zweiten Operanden von dem Wert des ersten Operanden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
<<= |
Verschieben Sie den Wert des ersten Operanden links der Anzahl von Bits, die durch den Wert des zweiten Operanden angegeben werden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
>>= |
Verschieben Sie den Wert des ersten Operanden rechts der Anzahl von Bits, die durch den Wert des zweiten Operanden angegeben werden. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
&= |
Rufen Sie den bitweisen AND-Operator des ersten und zweiten Operanden auf. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
^= |
Rufen Sie den bitweisen exklusiven OR-Operator des ersten und zweiten Operanden auf. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
|= |
Rufen Sie den bitweisen inklusiven OR-Operator des ersten und zweiten Operanden auf. Speichern Sie das Ergebnis in dem Objekt, das durch den ersten Operanden angegeben wird. |
Operatorschlüsselwörter
Drei der zusammengesetzten Zuweisungsoperatoren haben Schlüsselwortentsprechungen. Es sind:
Operator | Entsprechung |
---|---|
&= |
and_eq |
|= |
or_eq |
^= |
xor_eq |
C++ gibt diese Operatorschlüsselwörter als alternative Schreibweisen für die zusammengesetzten Zuordnungsoperatoren an. In C werden die alternativen Schreibweisen als Makros im <iso646.h>-Header bereitgestellt. In C++ sind die alternativen Schreibweisen Schlüsselwörter. Die Verwendung von <iso646.h> oder das C++-Äquivalent <ciso646> ist veraltet. In Microsoft C++ ist die Compileroption /permissive-
oder /Za
erforderlich, um die alternative Schreibweise zu aktivieren.
Beispiel
// expre_Assignment_Operators.cpp
// compile with: /EHsc
// Demonstrate assignment operators
#include <iostream>
using namespace std;
int main() {
int a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555;
a += b; // a is 9
b %= a; // b is 6
c >>= 1; // c is 5
d |= e; // Bitwise--d is 0xFFFF
cout << "a = 3, b = 6, c = 10, d = 0xAAAA, e = 0x5555" << endl
<< "a += b yields " << a << endl
<< "b %= a yields " << b << endl
<< "c >>= 1 yields " << c << endl
<< "d |= e yields " << hex << d << endl;
}
Einfache Zuweisung
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-values von Typen zugewiesen werden, die nur volatile
sind oder nicht const
oder volatile
sind.
Die Zuordnung zu Objekten vom Klassentyp (Typen struct
, union
und class
) wird von einer Funktion namens operator=
ausgeführt. Das Standardverhalten dieser Operatorfunktion besteht darin, eine elementweise Kopierzuweisung der nicht statischen Datenelemente und direkten Basisklassen des Objekts auszuführen. Dieses Verhalten kann jedoch mithilfe überladener Operatoren geändert werden. Weitere Informationen finden Sie unter Operatorüberladung. Klassentypen können auch Kopierzuweisungs- und Verschiebungsoperatoren enthalten. Weitere Informationen finden Sie unter Kopierkonstruktoren und Kopierzuweisungsoperatoren und Verschiebekonstruktoren und Verschiebezuweisungsoperatoren.
Ein Objekt einer eindeutig abgeleiteten Klasse von einer angegebenen Basisklasse kann einem Objekt der Basisklasse zugewiesen werden. Umgekehrt gilt dies nicht, weil eine implizite Konvertierung von einer abgeleiteten Klasse in eine Basisklasse erfolgt, 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:
Rufen Sie die Funktion
operator=
fürUserType2
auf, vorausgesetzt,operator=
wird mit dem ArgumentUserType1
angegeben.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 einUserType1
-Argument akzeptiert und das Ergebnis kopiert.
Verbundzuweisung
Die zusammengesetzten Zuordnungsoperatoren sind in der Tabelle mit Zuordnungsoperatoren aufgeführt. Diese Operatoren haben das Format e1op= e2, wobei e1 ein nicht-const
-modifizierbarer l-value ist und e2 Folgendes ist:
ein arithmetischer Typ
ein Zeiger, wenn op gleich
+
oder-
istein Typ, für den eine entsprechende
operator *op*=
-Überladung für den Typ e1 vorhanden ist
Das integrierte Format e1op= e2 verhält sich wie e1=
e1ope2, doch wird e1 nur einmal ausgewertet.
Eine Verbundzuweisung für einen enumerierten Typ generiert eine Fehlermeldung. Wenn der linke Operand ein Zeigertyp ist, muss der rechte Operand ein Zeigertyp oder ein konstanter Ausdruck sein, der zu 0 ausgewertet wird. Wenn der linke Operand ein ganzzahliger Typ ist, darf der rechte Operand kein Zeigertyp sein.
Ergebnis der integrierten Zuordnungsoperatoren
Die integrierten Zuordnungsoperatoren geben den Wert des Objekts zurück, das vom linken Operanden nach der Zuordnung angegeben wird (und die arithmetische/logische Operation im Fall von zusammengesetzten Zuordnungsoperatoren). Das Typergebnis ist der Typ des linken Operanden. Das Ergebnis eines Zuweisungsausdrucks ist immer ein l-value. Diese Operatoren weisen eine Assoziativität von rechts nach links auf. Der linke Operand muss ein veränderbarer L-Wert sein.
In ANSI C ist das Ergebnis eines Zuweisungsausdrucks kein l-value. Das bedeutet, dass der zulässige C++-Ausdruck (a += b) += c
in C nicht zulässig ist.
Siehe auch
Ausdrücke mit binären Operatoren
Integrierte C++-Operatoren, Rangfolge und Assoziativität
C-Zuweisungsoperatoren
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für