Avatar ·

Pourquoi std::forward est nécessaire et quels problèmes résout-il en C++?

J'étudie C++11 et je suis tombé sur std::forward. J'ai lu la documentation, mais je ne comprends pas complètement à quoi il sert. J'ai une fonction template qui prend un argument par référence universelle (T&&) et le passe à une autre fonction : ```cpp template void wrapper(T&& arg) { target(arg); // on passe simplement } ``` Mais quand je passe une rvalue (par exemple, un objet temporaire), target la reçoit comme une lvalue, car arg a un nom. À cause de cela, une copie se produit au lieu d'un déplacement. J'ai entendu dire que std::forward résout ce problème, mais je ne comprends pas comment. Pouvez-vous expliquer avec des exemples : quels problèmes exactement std::forward résout-il et comment l'utiliser correctement ? De préférence avec du code pour voir clairement la différence. Merci ! <<>>

Qu'est-ce que std::forward et à quoi sert-il

std::forward est un outil pour le transfert parfait (perfect forwarding) des arguments dans les fonctions template. Son objectif principal est de préserver la "catégorie de valeur" (value category) de l'argument.