- 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)?
Antwort
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.
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):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.
- 1. Overloading Zuweisungsoperator in C#
- 2. Zuweisungsoperator in c Überlastung ++
- 3. C++ Zuweisungsoperator in abgeleiteten Klasse
- 4. Java Zuweisungsoperator Verhalten vs C++
- 5. C++ Überlastung Zuweisungsoperator einer Bibliotheksklasse
- 6. C# mimic überschreibt den Zuweisungsoperator (=)
- 7. C++ Zuweisungsoperator für Referenzobjektvariable kopieren
- 8. C#: Umschalt links Zuweisungsoperator Verhalten
- 9. Zuweisungsoperator innerhalb des Funktionsparameters C++
- 10. "fast Standard" kopieren Konstruktor (& Zuweisungsoperator) in C++
- 11. Rückgabetyp Zuweisungsoperator in C++ von Überlastung
- 12. Zuweisungsoperator für doppelt verknüpfte Liste in C++
- 13. Wie Konstruktoren der Basisklasse und Zuweisungsoperator in C++ zu verwenden?
- 14. Warum gibt der Zuweisungsoperator den zugewiesenen Wert in C# zurück?
- 15. Wann wurde der Zuweisungsoperator aufgerufen?
- 16. Mehrdeutige Zuweisungsoperator
- 17. C++: Kann ich einen Zuweisungsoperator "explizit" machen
- 18. C++ Zuweisungsoperator = Überladen mit abgeleiteten Klassen
- 19. Verwirrt, wie der Zuweisungsoperator funktioniert
- 20. Zuweisungsoperator in Go Sprache
- 21. Parallel Zuweisungsoperator in Ruby
- 22. Nutzt der Zuweisungsoperator Speicher in Java?
- 23. Compiler Hilfe in Zuweisungsoperator der Basis abgeleitet
- 24. C++ - Konnte den Zuweisungsoperator nicht überladen
- 25. Zuweisungsoperator in print-Anweisung
- 26. Zuweisungsoperator Return
- 27. Standard-Zuweisungsoperator in der inneren Klasse mit Referenzmembern
- 28. Ein Null-Koaleszenz-Zuweisungsoperator?
- 29. Einfache Möglichkeit, Compound-Zuweisungsoperator in C# zu überladen?
- 30. JavaScript Zuweisungsoperator in 'while' Schleife
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