Heim >Backend-Entwicklung >C++ >Was können Sie mit einem verschobenen Objekt in C tun?

Was können Sie mit einem verschobenen Objekt in C tun?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 12:03:09574Durchsuche

What Can You Do with a Moved-From Object in C  ?

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:

  • Zerstörung
  • Zuweisung
  • Konstante Beobachter (z. B. get, empty, size)

Allerdings Operationen mit Vorbedingungen können in der Regel nicht ohne weitere Prüfung durchgeführt werden. Zum Beispiel:

  • Dereferenzierung
  • pop_back

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn