Zulässige Vorgänge für verschobene Objekte
Der C-Standard definiert, welche Aktionen mit verschobenen Objekten zulässig sind. Es wird davon ausgegangen, dass sich diese Objekte in einem nicht spezifizierten Zustand befinden, was eine begrenzte Auswahl an Vorgängen ermöglicht.
Standardreferenz
Abschnitt 17.6.5.15 [lib.types.movedfrom] Der Standard besagt, dass verschobene Objekte „in einem gültigen, aber nicht spezifizierten Zustand platziert werden sollen Zustand.“
Nicht restriktive Operationen
Objekte in einem nicht spezifizierten Zustand können Operationen unterzogen werden, für die keine Vorbedingungen gelten. Gängige Beispiele sind:
Restriktive Operationen
Operationen mit Vorbedingungen, wie z Dereferenzierung oder Pop_back können nicht direkt auf verschobene Objekte durchgeführt werden, da der nicht spezifizierte Zustand des Objekts möglicherweise nicht die erforderlichen Anforderungen erfüllt.
Beispiel: std::swap
Die beispielhafte Swap-Funktionsvorlage basiert auf Zuweisungen zu verschobenen Objekten (Zeilen 2 und 3). Dies ist gültig, da die Zuweisung eine nicht einschränkende Operation ist.
Alternative Konstruktorsyntax
In Bezug auf Zeile 1 gilt die Verwendung von T c = std::move(a) ; statt T c(std::move(a)); ist aus Effizienzgründen. Für die direkte Initialisierung ist ein Aufruf des Kopierkonstruktors erforderlich, für die Zuweisung jedoch nicht.
Das obige ist der detaillierte Inhalt vonWelche Vorgänge sind für aus C verschobene Objekte zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!