Heim >Backend-Entwicklung >C++ >Ist eine Selbstbewegungszuweisung mit R-Wert-Referenzparametern in C 11 möglich?
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
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!