Move semantics ist eine Programmiersprachenfunktion, die es ermöglicht, einen Kopiervorgang durch einen effizienteren "move" zu ersetzen, wenn das Quellobjekt ein temporäres oder ein anderweitig ablaufendes Objekt ist.
Ich habe eine Kopier- / Verschiebeprüfklasse:
%Vor%
Und ich habe festgestellt, dass running:
%Vor%
Erzeugt die folgende Ausgabe:
%Vor%
Warum wird die Initialisierung nicht einfach die Objekte verschieben? Ich weiß, dass std::vector...
Als C ++ Neuling habe ich wirklich Probleme, den neuen Move-Constructor von C ++ 11 zu verstehen und ich hoffe, dass jemand eine bestimmte Situation erklären kann, über die ich gestolpert bin. Nehmen wir diesen Beispielcode:
%Vor%
Also hab...
Wenn eine Klasse explizit eine Kopieroperation deklariert (d. h. einen Kopierkonstruktor oder einen Kopierzuweisungsoperator), werden Bewegungsoperationen für die Klasse nicht deklariert. Wenn eine Klasse jedoch explizit eine Verschiebungsoperat...
Nehmen wir zwei Strukturen / Klassen
%Vor%
Und als
%Vor%
Die Ausgabe ist
%Vor%
Frage
Wir wissen, dass Mitglieder von Rvalues selbst Rvalues sind. Deshalb wird mit a1 der Move-Konstruktor aufgerufen. Warum wird der Kopierkonstr...
Ich habe ein Objekt, das ich so beschränken möchte, dass es nur innerhalb von std::map zugewiesen wird. Hier ist der vereinfachte Code:
%Vor%
Um es auf Mac mit CLang kompilieren zu können, musste ich eine mit Sternchen markierte Zeile hin...
Warum funktioniert das nicht?
%Vor%
während dies geschieht:
%Vor%
Das hat damit zu tun, dass der Schlüsseltyp in der Map nicht kopierbar ist (benötigt std :: map das?). Relevante Fehlerzeilen beim Kompilieren mit g++ -std=c++14 :
%Vo...
Im folgenden Szenario
%Vor%
Was wäre der optimale Rückgabetyp? Meine bisherigen Gedanken sind:
Gibt den Wert r ref zurück und leitet die Funktionsargumente perfekt weiter:
%Vor%
Move konstruiere den Rückgabewert:
%Vor%
Versuch...
Ich sehe einige Fehler, die std::vector< std::unique_ptr< T > > mit std::move umgehen. Der Code, der das Problem reproduziert, ist dies:
%Vor%
Mit clang 3.4 erzeugt dieser Code diesen Fehler:
%Vor%
Die Situationen schei...
Der Compiler sagt mir, dass ich versuche, auf eine gelöschte Funktion (d. h. den Kopierkonstruktor eines Lambda-Ausdrucks) zuzugreifen. Aber ich sehe nicht wo.
%Vor%
( Code ist auch hier )
(Ich versuche herauszufinden, warum sie shared_p...
Es gibt ein großartiges Beispiel für die Umzugssemantik von Rust, die hier dokumentiert ist: Rust Move Semantics auf der Rust By Example-Website
Ich habe ein grundlegendes Verständnis beider Fälle demonstriert. Der erste Grund dafür, wie ei...