auto referenz
-
std::array<int, 5> &foo(); auto arr = foo();Warum ist arr ein "std::array<int, 5>" und kein "std::array<int, 5> &"?
-
nwp3 schrieb:
std::array<int, 5> &foo(); auto arr = foo();Warum ist arr ein "std::array<int, 5>" und kein "std::array<int, 5> &"?
Die Referenz bezieht sich auf den return Wert. Und den return Wert kopierst du dann. Ist doch praktisch das Gleiche wie:
int x; // return x int& rx=x; // Der return Wert: Referenz auf x int arr = rx; // Den return Wert kopieren
-
Mal ein Schritt weitergedacht:
autokann nie ein Referenztyp sein, weil nach dem Bezeichner immer ein=steht.
-
Als Ergänzung:
Wer auto in range-for nutzt, sollte die referenz nicht vergessen, sonst erzeugt jede Iteration eine Kopie.
-
out schrieb:
Mal ein Schritt weitergedacht:
autokann nie ein Referenztyp sein, weil nach dem Bezeichner immer ein=steht.Irgendwie ist der Satz komisch :D. Was ich sagen wollte.
=bedeutet ja immer Kopie. Wenn du keine Kopie willst, musst DU das ausdrücklich sagen, indem du ein&anhängst... War ja schon immer so, und hat sich auch beiautonicht geändert.phlox81 schrieb:
Wer auto in range-for nutzt, sollte die referenz nicht vergessen, sonst erzeugt jede Iteration eine Kopie.
Auch bei built-in Typen? Oder gilt hier dieselbe Regel wie bei Funktionsparametern?
-
Auch bei built-in Typen? Oder gilt hier dieselbe Regel wie bei Funktionsparametern?
Ja, der Typ wird deduziert wie Template-Argumente bei einem Funktionstemplate-Aufruf.
Das bedeutet, qualifizierst du auto nicht mit einem &, dann gibt es immer eine lvalue-to-rvalue conversion.