Heim >Backend-Entwicklung >C++ >Welche Auswirkungen hat die Selbstbewegungszuweisung für Vektoren in der C-Standardbibliothek?

Welche Auswirkungen hat die Selbstbewegungszuweisung für Vektoren in der C-Standardbibliothek?

Linda Hamilton
Linda HamiltonOriginal
2024-11-20 12:55:09357Durchsuche

What are the implications of self move assignment for vectors in the C   Standard Library?

Selbstbewegungszuweisung in der C-Standardbibliothek

Die C-Standardbibliothek garantiert bestimmte Verhaltensweisen für die Selbstbewegungszuweisung, wie im Standard definiert.

Konkret besagt der Standard, dass die Implementierung für Funktionen in der Standardbibliothek mit Argumenten vom Typ T&& annehmen kann dass der Parameter eine eindeutige Referenz auf das Argument ist. Dies bedeutet, dass die Standardbibliothek ihr Verhalten basierend auf der Annahme optimieren kann, dass der Parameter ein temporärer R-Wert ist.

Im Fall der Selbstbewegungszuweisung darf die Implementierung davon ausgehen, dass der Argumentvektor ein Pr-Wert ist. Dies bedeutet, dass die Standardbibliothek möglicherweise Optimierungen durchführt, die nicht möglich wären, wenn das Argument ein L-Wert wäre.

Daher führt die Selbstverschiebungszuweisung in der Standardbibliothek wahrscheinlich dazu, dass der Vektor in einer Ressource verbleibt -loser Zustand mit einer Kapazität von 0. Wenn der Vektor bereits eine Kapazität von 0 hat, lautet die Selbstbewegungszuweisung a no-op.

Update

Der neueste Entwurf des C-Standards besagt ausdrücklich, dass in den MoveAssignable-Anforderungen der Ausdruck t = rv (wobei rv ein r-Wert ist) Erfordert nur, dass t vor der Zuweisung äquivalent zu rv ist, wenn t und rv nicht auf dasselbe Objekt verweisen. Darüber hinaus ist der Status von RV nach der Zuweisung nicht spezifiziert.

Das obige ist der detaillierte Inhalt vonWelche Auswirkungen hat die Selbstbewegungszuweisung für Vektoren in der C-Standardbibliothek?. 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