Was ist R-Value-Referenz, die im nächsten C++ - Standard kommt?Was ist R-Value-Referenz, die im nächsten C++ - Standard kommt?
Antwort
Hier ist eine wirklich lange article von Stephan T. Lavavej
Aber aufgepasst, er erwähnt in einem späteren Video-Vortrag, dass der Artikel auf Rvalue Referenzen v1 basiert, und die Regeln später auf "v2" geändert. In der ursprünglichen Version würden rvalue-Referenzen an lvalues binden, aber dann änderte das Komitee die Regeln. Nur eine Warnung. – woolstar
Es ermöglicht Ihnen, zwischen Code zu unterscheiden, die Sie vorbei einen Verweis auf ein r-Wert oder einen L-Wert genannt hat. Zum Beispiel:
void foo(int &x);
foo(1); // we are calling here with the r-value 1. This would be a compilation error
int x=1;
foo(x); // we are calling here with the l-value x. This is ok
eine r-Wert Referenz verwenden, können wir zulassen, dass in Verweisen auf Provisorien wie im ersten Beispiel oben weitergeben müssen:
void foo(int &&x); // x is an r-value reference
foo(1); // will call the r-value version
int x=1;
foo(x); // will call the l-value version
Das ist interessanter, wenn wir wollen, Übergeben des Rückgabewerts einer Funktion, die ein Objekt erstellt, an eine andere Funktion, die dieses Objekt verwendet.
std::vector create_vector(); // creates and returns a new vector
void consume_vector(std::vector &&vec); // consumes the vector
consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined
Der Umzug Konstruktor wirkt wie der Copykonstruktor, aber es definiert ist, einen R-Wert Bezug zu nehmen, anstatt eine L-Wert (const) Referenz. Es ist erlaubt, eine r-Wert-Semantik zu verwenden, um die Daten aus dem temporär erzeugten in create_vector
zu verschieben und sie in das Argument consume_vector
zu schieben, ohne eine teure Kopie aller Daten in dem Vektor zu machen.
create_vector würde nach Wert, nicht nach Rvalue-Referenz (dies wäre eine Referenz auf eine temporäre) zurückgeben. Beachten Sie, dass Value-Return-Typen bereits rvalues sind. –
Werfen Sie einen Blick auf Why are C++0x rvalue reference not the default?, die ihre praktische Verwendung ziemlich gut erklärt.
- 1. Welcher Entwurf ist dem C++ 14-Standard am nächsten?
- 2. C# Winforms-Anwendung Was kommt als nächstes?
- 3. Was ist die Standard-MATLAB-Farbreihenfolge?
- 4. Was ist die Standard-Python-Protokollierung Formatierer
- 5. Was ist der Standard-Namespace
- 6. C# Syntaxhilfe Was kommt nach dem Konstruktor?
- 7. Was ist Microsoft.Contracts und woher kommt es?
- 8. Was ist die Bedeutung von #define im Ziel C?
- 9. Was sind die Plattformen im .NET Platform Standard?
- 10. Intellij: Was ist die Abkürzung für den nächsten/vorherigen Fehler?
- 11. Was ist Multi-Pass-Garantie gemäß C++ ISO-Standard?
- 12. Was ist die Standard-Programmschriftart, die in Textmate verwendet wird?
- 13. C# Woher kommt die dbml-Datei?
- 14. Finde die nächsten Knoten im binären Suchbaum
- 15. Was ist Perls Standard-String-Vergleichsreihenfolge?
- 16. Welche Zugriffsspezifizierer sind in C# verfügbar? Was ist der Standard?
- 17. Was ist ein consume-Vorgang in C++ 11 Standard?
- 18. C# öffnen Standard-Browser im Privatmodus
- 19. Was sind die Standard-Verschlüsselungsdateiformate?
- 20. Ist dieser gültige Standard c?
- 21. Was sind die "Standard" -Zeitzonenabkürzungen?
- 22. Was ist die Puffergröße im Socket?
- 23. Woher kommt die Namenskonvention für C# Generika?
- 24. Was ist "tragbares C++"?
- 25. Was ist die Standard-SOAP-Bibliothek in groovy verwenden?
- 26. Was ist die Standard-Serialisierung von ASP.net verwendet HttpRuntime.Cache
- 27. Ist C++ 21 der nächste Standard?
- 28. Was ist die Standard-Hash-Funktion in C++ verwendet std :: unordered_map?
- 29. Wie kann ich die Durchschnittszahl zählen, die 100 am nächsten kommt?
- 30. Was ist die Standard-Sitzungs-Ablaufzeit in Sinatra?
ich diese Frage 1 Tag sehen die C++ Äquivalent des Werdens „Wie trete ich eine Liste von Strings zusammen in C#?“), Dh gestellt und beantwortet alle paar Tage! –