Avatar ·

Was bedeutet T&& (doppeltes Ampersand) in C++11?

Hallo! Ich habe angefangen, C++11 zu lernen, und bin im Code auf die neue Notation `T&&` gestoßen. Ich verstehe, dass `&` eine Referenz ist und `&&` ein logisches "UND". Aber im Kontext von Typen ist das etwas anderes. Zum Beispiel habe ich diesen Code gesehen: ```cpp template void foo(T&& arg) { // etwas tun } ``` Und auch: ```cpp void bar(std::vector&& vec) { // ... } ``` Zuerst dachte ich, `T&&` sei eine "Referenz auf eine Referenz", was sinnlos klingt. Dann las ich, dass es "rvalue reference" heißt. Aber ich verstehe nicht, wozu das gut ist. Was ist der Unterschied zwischen `T&` und `T&&`? Wann sollte ich `T&&` statt `T&` oder `const T&` verwenden? Und was ist "perfect forwarding", von dem alle sprechen? Bitte erklären Sie es anhand einfacher Beispiele. Ich habe das Gefühl, dass ich etwas Wichtiges im modernen C++ verpasse. <<>>

Kurze Antwort: Rvalue-Referenzen und Move-Semantik

T&& in C++11 ist eine rvalue reference (Referenz auf ein temporäres Objekt). Sie ermöglicht