IT-lexikon › Programmering › Perfect forwarding

Perfect forwarding

Programmering In English → Uppdaterad: 2026-07-29

Att skicka vidare argument till en annan funktion utan att tappa bort om de var temporära eller inte. Det som gör att make_unique och emplace_back går att skriva.

En omslagsfunktion som tar sina argument som vanliga referenser förlorar informationen om värdekategori: allt ser ut som ett namngivet objekt inne i funktionen, så en temporär som borde ha flyttats blir istället kopierad. Lösningen är mönstret template<class... A> void f(A&&... a) { g(std::forward<A>(a)...); }. Det dubbla et-tecknet betyder här inte rvalue-referens utan är en vidarebefordringsreferens, eftersom typen härleds — reglerna för referenskollaps gör att den binder till både temporärer och namngivna objekt och behåller skillnaden i den härledda typen. std::forward är sedan en villkorlig typomvandling som återställer den ursprungliga kategorin. Glömmer man den blir mönstret meningslöst.

← Tillbaka till lexikonet