C 11 führte die Funktion std::move ein, um die Bewegungssemantik zu unterstützen. Dies warf die Frage auf: Warum kann std::move für konstante Objekte verwendet werden?
Wenn wir versuchen, ein konstantes Objekt zu verschieben, scheint es, als würden wir versuchen, es zu ändern, was keinen Sinn ergeben würde. Allerdings verschiebt std::move geschickterweise eigentlich nichts. Stattdessen weist es den Compiler an, zu versuchen, das Objekt zu verschieben.
Wenn die Klasse des Objekts einen Verschiebungskonstruktor hat, erfolgt die Verschiebung wie erwartet. Wenn dies bei der Klasse jedoch nicht der Fall ist, verwendet der Compiler stattdessen den Kopierkonstruktor und stellt so sicher, dass das konstante Objekt sicher kopiert wird.
Zum Beispiel:
struct Cat { Cat() {} }; const Cat cat; Cat cat2 = std::move(cat);
In diesem Fall ist die std ::move greift auf den Kopierkonstruktor zurück und gibt „COPY“ anstelle von „MOVE“ aus, wenn ein std::cout zum hinzugefügt wird Konstruktoren.
Das Verhalten von std::move bei konstanten Objekten ist keine Falle, sondern ein Feature. Es ermöglicht effiziente Bewegungsversuche, ohne die Stabilität des Programms zu gefährden. Darüber hinaus basiert nicht jeder Code auf der Verschiebungssemantik, daher bietet die Möglichkeit, dass std::move mit konstanten Objekten arbeitet, Flexibilität.
Das obige ist der detaillierte Inhalt vonWarum funktioniert „std::move' bei konstanten Objekten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!