Heim >Backend-Entwicklung >C++ >Ist eine Selbstbewegungszuweisung mit R-Wert-Referenzparametern in C 11 möglich?

Ist eine Selbstbewegungszuweisung mit R-Wert-Referenzparametern in C 11 möglich?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-10 13:52:02664Durchsuche

Is Self Move Assignment Possible with Rvalue Reference Parameters in C  11?

Selbstbewegungszuweisung und die Standardbibliothek

In C 11 bietet die Standardbibliothek bestimmte Garantien für die Selbstbewegungszuweisung. Wenn ein Funktionsargument an einen R-Wert-Referenzparameter bindet, kann die Implementierung gemäß dem Standard davon ausgehen, dass der Parameter eine eindeutige Referenz auf dieses Argument ist.

Betrachten Sie die folgende Funktion:

template<class T>
std::vector<T> selfAssign(std::vector<T> v) {
  v = std::move(v);
  return v;
}

Da das Vektorargument an einen R-Wert-Referenzparameter bindet, kann die Implementierung von std::vector::operator=(vector&& other) davon ausgehen dieser andere ist ein Wert. Folglich ist eine Selbstbewegungszuweisung für v in der selfAssign-Funktion nicht möglich.

Der Standard schreibt vor, dass ein R-Wert-Referenzparameter als ein Pr-Wert angenommen werden kann, wodurch die Möglichkeit einer Selbstbewegungszuweisung in ausgeschlossen wird solche Fälle. Es ist wahrscheinlich, dass der an die selfAssign-Funktion übergebene Vektor in einem ressourcenlosen Zustand verbleibt oder einem No-Op unterzogen wird, wenn er bereits über eine Kapazität von 0 verfügt.

Allerdings der neueste Arbeitsentwurf des Standards, N4618 , modifiziert diese Anforderungen leicht. Konkret heißt es, dass, wenn t und rv nicht auf dasselbe Objekt verweisen, nach der Zuweisung „t = rv“ t möglicherweise nur den äquivalenten Wert von rv vor der Zuweisung enthalten muss. Unabhängig davon bleibt der Zustand von RV nach der Zuweisung unbestimmt.

Das obige ist der detaillierte Inhalt vonIst eine Selbstbewegungszuweisung mit R-Wert-Referenzparametern in C 11 möglich?. 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