Heim >Backend-Entwicklung >C++ >Warum weisen integrierte Typen keine Bewegungssemantik auf?
Der bereitgestellte Code demonstriert das unerwartete Verhalten, wenn der integrierte Typ „Integer Num“ innerhalb der Funktion „Func“ geändert wird obwohl es mit std::move als R-Wert-Referenz übergeben wird. Dieses Verhalten widerspricht dem allgemeinen Verständnis, dass std::move Eigentum und Ressourcen überträgt.
Move-Semantik bezieht sich auf die Übertragung von Eigentum und Ressourcen von einem Objekt auf ein anderes. In diesem Zusammenhang sind die Ressourcen die Datenwerte oder der zugewiesene Speicher, der zu einem Objekt gehört.
Eingebaute Typen, wie z. B. Ganzzahlen, repräsentieren selbst die Ressourcen, die sie verwenden halten. Daher macht es wenig Sinn, das Eigentum an ihren Ressourcen zu übertragen. Stattdessen übergeben sie einfach den Verweis auf das Objekt, sodass Änderungen im Originalobjekt widergespiegelt werden können.
std::move verschiebt ein Objekt nicht wirklich . Sein Zweck besteht darin, L-Wert-Referenzen (Referenzen auf Objekte mit definierten Standorten) in X-Wert-Referenzen (Referenzen auf abgelaufene Objekte) umzuwandeln. Durch diese Konvertierung kann die Referenz an R-Wert-Referenzen innerhalb der Empfangsfunktion gebunden werden.
Nach dem Aufruf von std::move für ein integriertes Typobjekt wurde die Referenz übergeben Die Funktion bezieht sich immer noch auf das ursprüngliche Objekt. Alle am Objekt vorgenommenen Änderungen werden im Original widergespiegelt.
Im Gegensatz zu benutzerdefinierten Typen, die benutzerdefinierte Bewegungssemantiken definieren können, weisen integrierte Typen kein solches Verhalten auf. std::move ruft keine Verschiebungskonstruktoren oder Zuweisungsoperatoren für integrierte Typen auf. Stattdessen werden sie zu Bindungszwecken einfach in R-Wert-Referenzen umgewandelt. Dieses Verhalten ist durch den C-Standard genau definiert und erklärt die unerwartete Änderung von num im angegebenen Codebeispiel.
Das obige ist der detaillierte Inhalt vonWarum weisen integrierte Typen keine Bewegungssemantik auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!