Heim > Artikel > Backend-Entwicklung > Funktioniert die Selbstbewegungszuweisung mit „std::vector' in der C-Standardbibliothek?
Selbstbewegungszuweisung in der C-Standardbibliothek
In C 11 bietet der Standard bestimmte Garantien für die Selbstbewegungszuweisung, insbesondere innerhalb des Standards Bibliothek. Lassen Sie uns untersuchen, was diese Zusicherungen beinhalten.
Gemäß Abschnitt 17.6.4.9 des C 11-Standards wird unter dem Thema „Funktionsargumente“ angegeben, dass, wenn ein Funktionsargument an einen R-Wert-Referenzparameter gebunden ist, die Die Implementierung kann davon ausgehen, dass diese Referenz ausschließlich für das Argument gilt.
Dies impliziert, dass innerhalb der Implementierung von std::vector
Was wahrscheinlich eintreten wird, ist, dass v ressourcenlos gemacht wird (mit einer Kapazität von Null). Diese Aktion ist ein No-Op, wenn v bereits keine Kapazität hat.
Aktualisierung:
Der neueste Arbeitsentwurf (N4618) bietet eine genauere Definition von MoveAssignable-Anforderungen. Es gibt an, dass der Ausdruck t = rv (wobei rv ein r-Wert ist) erfordert, dass t nur dann mit dem Wert von rv vor der Zuweisung übereinstimmt, wenn sie nicht auf dasselbe Objekt verweisen. Unabhängig davon wird der Zustand von RV nach der Zuweisung nicht mehr spezifiziert. Ein zusätzlicher Hinweis sorgt für weitere Klarstellung:
„rv muss weiterhin die Anforderungen der Bibliothekskomponente erfüllen, die es verwendet, unabhängig davon, ob t und rv auf dasselbe Objekt verweisen.“
Das obige ist der detaillierte Inhalt vonFunktioniert die Selbstbewegungszuweisung mit „std::vector' in der C-Standardbibliothek?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!