Als «move-semantics» getaggte Fragen

12
Was ist Bewegungssemantik?
Ich habe gerade das Podcast-Interview mit Scott Meyers über C ++ 0x gehört . Die meisten neuen Funktionen haben für mich Sinn gemacht, und ich freue mich jetzt tatsächlich auf C ++ 0x, mit einer Ausnahme. Ich bekomme immer noch keine Bewegungssemantik ... Was ist das genau?

7
push_back vs emplace_back
Ich bin etwas verwirrt über den Unterschied zwischen push_backund emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); Da es eine push_backÜberlastung gibt, die eine R-Wert-Referenz nimmt, sehe ich nicht ganz, wozu der Zweck emplace_backwird?


6
C ++ 11 rWerte und Verschieben der Semantikverwirrung (return-Anweisung)
Ich versuche, rWert-Referenzen zu verstehen und die Semantik von C ++ 11 zu verschieben. Was ist der Unterschied zwischen diesen Beispielen und welches von ihnen wird keine Vektorkopie machen? Erstes Beispiel std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); Zweites Beispiel std::vector<int>&& return_vector(void) { std::vector<int> …

3
Was ist "Wertreferenz für * dies"?
Kam auf einen Vorschlag namens "rvalue reference for * this" auf der C ++ 11- Statusseite von clang . Ich habe ziemlich viel über rvalue-Referenzen gelesen und verstanden, aber ich glaube nicht, dass ich davon weiß. Ich konnte mit den Begriffen auch nicht viele Ressourcen im Web finden. Es gibt …

2
Kann modernes C ++ Ihnen Leistung kostenlos bringen?
Es wird manchmal behauptet, dass C ++ 11/14 Ihnen eine Leistungssteigerung bringen kann, selbst wenn Sie lediglich C ++ 98-Code kompilieren. Die Begründung erfolgt normalerweise in Anlehnung an die Bewegungssemantik, da in einigen Fällen die rvalue-Konstruktoren automatisch generiert werden oder jetzt Teil der STL sind. Jetzt frage ich mich, ob …

6
Warum sollte ich std :: move std :: shared_ptr verschieben?
Ich habe den Clang-Quellcode durchgesehen und diesen Ausschnitt gefunden: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Warum sollte ich will std::moveein std::shared_ptr? Gibt es einen Grund, das Eigentum an einer gemeinsam genutzten Ressource zu übertragen? Warum sollte ich das nicht einfach stattdessen tun? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { …


6
Wie verwende ich einen benutzerdefinierten Löscher mit einem std :: unique_ptr-Mitglied?
Ich habe eine Klasse mit einem unique_ptr-Mitglied. class Foo { private: std::unique_ptr<Bar> bar; ... }; Die Leiste ist eine Klasse von Drittanbietern mit einer Funktion create () und einer Funktion destroy (). Wenn ich a std::unique_ptrdamit in einer eigenständigen Funktion verwenden wollte, könnte ich Folgendes tun: void foo() { std::unique_ptr<Bar, …


1
Kann nicht aus ausgeliehenen Inhalten herausgehen / kann nicht hinter einer gemeinsamen Referenz herausgehen
Ich verstehe den Fehler nicht cannot move out of borrowed content. Ich habe es oft erhalten und immer gelöst, aber ich habe nie verstanden warum. Beispielsweise: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } erzeugt den Fehler: error[E0507]: cannot move …


6
Verschieben Sie den Zuweisungsoperator und `if (this! = & Rhs)`
Im Zuweisungsoperator einer Klasse müssen Sie normalerweise überprüfen, ob das zugewiesene Objekt das aufrufende Objekt ist, damit Sie nichts vermasseln: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } Benötigen Sie dasselbe für den Verschiebungszuweisungsoperator? Gibt es jemals eine Situation, in …

3
Was ist der Vorteil der Verwendung von Weiterleitungsreferenzen in bereichsbasierten for-Schleifen?
const auto&würde ausreichen, wenn ich schreibgeschützte Operationen ausführen möchte. Ich bin jedoch darauf gestoßen for (auto&& e : v) // v is non-const ein paar Mal in letzter Zeit. Das wundert mich: Ist es möglich, dass in einigen dunklen Eckfällen die Verwendung von Weiterleitungsreferenzen im Vergleich zu auto&oder einen gewissen …

2
Wie überträgt std :: move () Werte in RValues?
Ich habe gerade festgestellt, dass ich die Logik von nicht vollständig verstanden habe std::move(). Zuerst habe ich es gegoogelt, aber es scheint nur Dokumente zu geben, wie man es benutzt std::move(), nicht wie seine Struktur funktioniert. Ich meine, ich weiß, was die Vorlagenelementfunktion ist, aber wenn ich mir die std::move()Definition …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.