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!