Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die Selbstverschiebungszuweisung für Standardbibliothekscontainer in C 11 nicht zulässig?

Warum ist die Selbstverschiebungszuweisung für Standardbibliothekscontainer in C 11 nicht zulässig?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 02:49:03352Durchsuche

Why is Self Move Assignment Not Allowed for Standard Library Containers in C  11?

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!

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