2016-11-20 7 views
-1
  1. Der Zuweisungsoperator in C++ (z. B. x = 5) gibt einen Wert zurück und kopiert diesen Wert in die Variable. Was ist der Wert, der von dem Zuweisungsoperator zurückgegeben wird (d. H. Was ist das Ergebnis)?
+4

hmm, enthält Ihre Frage keine Antwort? Der Zuweisungsoperator gibt den zugewiesenen Wert zurück (für integrierte Typen, für benutzerdefinierte Typen gibt er den benutzerdefinierten Wert zurück ...) – Hcorg

Antwort

0

Gemäß dem C++ Standard (5,18 Zuordnung und Verbindung Zuweisungsoperator)

1 Der Zuweisungsoperator (=) und die Verbindung Zuweisungsoperator alle Gruppe von rechts nach links. Alle erfordern eine modi fi Lage lvalue als ihre linken Operanden und einen L-Wert zurück zum linken Operanden Bezug

und

2 In einfacher Zuweisung (=), ersetzt der Wert des Ausdrucks, dass des Objekts, auf das der linke Operand verweist.

Wenn Sie also das folgende Code-Schnipsel

int x; 
x = 5; 

dann erhalten x den Wert 5 und die Zuweisungsausdruck der lvalue von x zurückgibt. So können Zuweisungsoperatoren zum Beispiel die folgende Art und Weise

(x = 5) += y; 

weil die Expression x = 5 kehrt lvalue von x kombinieren.

In C wird dieser Code ungültig, da in C der Zuweisungsausdruck rvalue zurückgibt.

1

In C++ der integrierte Kopie Zuweisungsoperator erzeugt einen Lvalue Ausdruck, der zugewiesen werden kann. Effektiv ist das so, als wäre es mit einem Referenztyp-Ergebnis deklariert worden.

Ein benutzerdefinierter Kopierzuweisungsoperator für einen Klassentyp kann einen beliebigen Rückgabetyp haben, einschließlich (welcher IMO wäre ideal) void.

Wenn jedoch eine Klasse als Elementtyp eines Standardcontainers verwendet werden soll, unterliegt sie den Anforderungen der Standardbibliothek. Anschließend muss der Kopierzuweisungsoperator der Klasse einen Verweis auf das zugewiesene Objekt zurückgeben.

C++ 11 §17.6.3.1/2 (utility.arg.requirements/2), Tabellen 22 und 23 (von N3290):

enter image description here


Um einen Kopierzuweisungsoperator als gelöscht oder voreingestellt zu deklarieren, muss er einen Verweis auf den Typ des zugewiesenen Objekts zurückgeben, z

struct S 
{ 
    auto operator=(S const&) -> S& = delete; 
}; 

Ein benutzerdefinierte Kopie Zuweisungsoperator kann nur für einen Klasse-Typen definiert wird, nicht für einen Aufzählungstyp, weil es eine Funktion nicht-statisches Elements sein ist erforderlich.

Verwandte Themen