Als «rvalue-reference» getaggte Fragen

Eine rvalue-Referenz ist eine neue Sprachfunktion in C ++ 11, die eine Referenz auf einen rvalue darstellt. Zusammen mit dem Reduzieren von Referenzen werden sie verwendet, um Verschiebungssemantik und perfekte Weiterleitung zu implementieren und zu ermöglichen.


6
Vorteile der Verwendung von Forward
std::forwardWird bei perfekter Weiterleitung verwendet, um die benannten rWertreferenzen t1und t2unbenannte rWertreferenzen zu konvertieren . Was ist der Zweck davon? Wie würde sich das auf die aufgerufene Funktion auswirken, innerwenn wir t1& t2als lWerte belassen? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

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> …

6
Verschieben Sie die Erfassung in Lambda
Wie kann ich in einem C ++ 11-Lambda durch Verschieben (auch als r-Wert-Referenz bezeichnet) erfassen? Ich versuche so etwas zu schreiben: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };



1
Wie würde man std :: forward für alle Argumente in einer variadischen Funktion aufrufen?
Ich habe gerade eine generische Objektfabrik geschrieben und die Boost-Präprozessor-Metabibliothek verwendet, um eine variable Vorlage zu erstellen (mit 2010 und ohne Unterstützung). Meine Funktion verwendet rval-Referenzen und std::forwardfür eine perfekte Weiterleitung, und es hat mich zum Nachdenken gebracht ... Wenn C ++ 0X herauskommt und ich einen Standard-Compiler habe, würde …




3
Lambda-Verschluss-l-Werte können als r-Wert-Referenzparameter übergeben werden
Ich fand heraus, dass lvalueLambda-Verschlüsse immer als rvalueFunktionsparameter übergeben werden können. Siehe die folgende einfache Demonstration. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a …

2
Warum ist eine Aufzählungsvariable hier ein Wert?
Beispiel: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Beim Kompilieren wird folgende Fehlermeldung angezeigt: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' …
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.