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