Selbstverschiebungszuweisung in Standardbibliothekscontainern
Der C 11-Standard garantiert, dass die Selbstverschiebungszuweisung (Zuweisung eines Objekts zu sich selbst, nachdem es erfolgt ist) wurde verschoben) ist für Standardbibliothekscontainer wie std::vector nicht möglich.
Die spezifische Bestimmung im Standard findet sich in [res.on.arguments], die besagt, dass Funktionsargumente an R-Wert-Referenzen gebunden sind gelten als eindeutige Verweise auf ihr gebundenes Argument. Dies bedeutet, dass die Implementierung davon ausgehen kann, dass sich das Argument nicht auf dasselbe Objekt wie das Ziel der Zuweisung bezieht.
Im Fall von std::vector ist der Verschiebungszuweisungsoperator (operator=) definiert Nehmen Sie eine R-Wert-Referenz. Wenn selfAssign() mit einem std::vector-Argument aufgerufen wird, lässt der Standard daher zu, dass die Implementierung davon ausgeht, dass das Argument eine eindeutige Referenz auf ein temporäres Objekt ist. Infolgedessen ist eine Selbstverschiebungszuweisung nicht möglich und der std::vector verbleibt in einem ressourcenlosen Zustand (0 Kapazität).
Es ist jedoch wichtig zu beachten, dass dieses Verhalten nur für garantiert ist Standard-Bibliothekscontainer. Für benutzerdefinierte Typen bietet der C 11-Standard keine Garantien hinsichtlich der Selbstbewegungszuweisung.
Das obige ist der detaillierte Inhalt vonWarum ist die Selbstverschiebungszuweisung für Standardbibliothekscontainer in C 11 nicht zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!