Heim  >  Artikel  >  Backend-Entwicklung  >  Funktioniert die Selbstbewegungszuweisung mit „std::vector' in der C-Standardbibliothek?

Funktioniert die Selbstbewegungszuweisung mit „std::vector' in der C-Standardbibliothek?

Barbara Streisand
Barbara StreisandOriginal
2024-11-11 17:23:03164Durchsuche

Does self-move assignment work with `std::vector` in the C   Standard Library?

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::operator=(vector&& other) ist es zulässig anzunehmen, dass other ein PR-Wert ist. Wenn also other ein Wert ist, ist eine Selbstbewegungszuweisung nicht möglich.

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!

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