Comprendre les cas d'utilisation de std::forward en C
C 0x introduit la fonction std::forward, un outil précieux pour le transfert arguments dans les modèles de fonctions. Lorsque vous utilisez std::forward, il est important de considérer quand et comment il doit être utilisé.
Quand utiliser std::forward
std::forward est principalement utilisé lors du passage d'arguments à un autre modèle de fonction :
<code class="cpp">template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); }</code>
Dans cet exemple, std::forward permet à foo de transmettre l'argument arg à bar avec le type et la qualification de référence corrects. Sans std::forward, l'argument serait passé sous forme de copie, ce qui pourrait conduire à des opérations inutiles.
Déclarations de paramètres avec &&
Dans la fonction foo ci-dessus, le la déclaration des paramètres utilise &&. Ce n'est pas une exigence pour utiliser std::forward, mais cela peut offrir certains avantages. En utilisant &&, la fonction peut accepter à la fois les rvalues et les lvalues, même si elle est déclarée avec une référence rvalue.
Transfert dans plusieurs listes d'arguments
Dans les cas avec plusieurs listes d'arguments, std::forward peut être utilisé pour transmettre des arguments individuellement :
<code class="cpp">template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); }</code>
Dans ce cas, il est préférable d'utiliser && dans la déclaration du paramètre, car cela permet à la fonction d'accepter tout type d'argument. Les arguments sont ensuite transmis à doSomethingElse en utilisant std::forward:
<code class="cpp">doSomethingElse<val, Params...>(std::forward<Params>(args)...); }</code>
Transfert multiple
Le transfert du même argument vers plusieurs fonctions soulève des inquiétudes quant au déplacement et à la création du mémoire invalide. Par conséquent, il n'est généralement pas conseillé d'utiliser std::forward plusieurs fois pour le même argument.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!