Welche Vorgänge sind für verschobene Objekte zulässig?
Der C-Standard definiert das Verhalten von Objekten, von denen verschoben wurden. Dieses Wissen ist entscheidend für das Verständnis, wie bestimmte Funktionen wie std::swap funktionieren.
Standarddefinition
Gemäß dem Standard (Abschnitt 17.6.5.15) Objekte aus C-Standardbibliothekstypen können verschoben werden und werden anschließend in einem „gültigen, aber nicht spezifizierten“ Verzeichnis abgelegt Zustand.“
Auswirkungen auf Vorgänge
Wenn sich ein Objekt in einem nicht spezifizierten Zustand befindet, können Sie jeden Vorgang ausführen, für den keine Vorbedingungen gelten. Vorbedingungslose Operationen umfassen:
Allerdings Operationen mit Vorbedingungen können in der Regel nicht ohne weitere Prüfung durchgeführt werden. Zum Beispiel:
Beispiel: std::swap
Der std: Die Funktion :swap erfordert, wie in der ursprünglichen Frage gezeigt, die Zuweisung zu verschobenen Objekten. Dies ist möglich, weil die Zuweisung eine vorbedingungslose Operation ist.
Zusätzlicher Hinweis: T c = std::move(a) vs. T c(std::move(a))
In der std::swap-Implementierung wird eine direkte Verschiebungszuweisung T c = std::move(a) anstelle eines Kopierkonstruktors T verwendet c(std::move(a)). Dies geschieht, um eine unnötige Kopie von a zu vermeiden, die zu einer Leistungseinbuße führen würde.
Das obige ist der detaillierte Inhalt vonWas können Sie mit einem verschobenen Objekt in C tun?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!