int const& statt int&& ausgegeben???
-
kann mir jemand erklaeren wieso hier int const& statt int&& ausgegeben wird?
#include <iostream> void f(int const& a) { std::cout << "int const&\n"; } void f(int&& a) { std::cout << "int&&\n"; } int main() { int&& a=3; f(a); f(3); }
-
Weil der Teilausdruck a in foo(a) ein lvalue ist. Lvalue- und rvalue-Referencen unterscheiden sich nur in Hinsicht darauf, an welche Art von Initialisierern sie gebunden werden können. Nach der Initialisierung sind sie nicht unterscheidbar (wir vergessen mal decltype).
-
Erstmal hat das Programm 2 Ausgaben:
int const& int&&
Dein Programm gibt also int&& aus.
Oder erwartest du etwa, dass es dass 2x ausgeben sollte? Dazu müsstest du std::move verwenden, also
f(std::move(a));
a
ist ja ein benanntes Objekt, diese bindet nicht an int&&.Ganz ausführliche Erklärung von Scott Meyers: https://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11 (damals verwendet er noch "universal reference", heute heißt das "forwarding reference", aber ansonsten sollte dort alles erklärt sein)
-
wob schrieb:
Ganz ausführliche Erklärung von Scott Meyers: https://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11 (damals verwendet er noch "universal reference", heute heißt das "forwarding reference", aber ansonsten sollte dort alles erklärt sein)
Ich sehe den Zusammenhang nicht. An welcher Stelle in hansrudolfs Code muss ein Typ erst noch deduziert werden?
-
In dem Video wird irgendwo alles erklärt, was irgendwie mit && zu tun hat - man muss nur suchen... Habe eben nochmal reingeschaut, so nach etwa 36 Minuten wird genau dieser Fall erklärt. Damals habe ich anhand dieses Vortrags gelernt, wie && funktioniert.
Der URef-Teil ist für diese Frage irrelevant, da hast du recht.