C での std::forward の使用例を理解する
C 0x では、転送のための貴重なツールである std::forward 関数が導入されています。関数テンプレートの引数。 std::forward を使用する場合、いつどのように使用するかを考慮することが重要です。
std::forward を使用する場合
std::forward は主に引数を別の関数テンプレートに渡すときに使用されます:
<code class="cpp">template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); }</code>
この例では、std::forward により、foo が正しい型と参照修飾を使用して引数 arg を bar に転送できるようになります。 std::forward を使用しない場合、引数はコピーとして渡され、不要な操作が発生する可能性があります。
&& によるパラメータ宣言
上記の foo 関数では、パラメータ宣言では && を使用します。これは std::forward を使用するための要件ではありませんが、いくつかの利点が得られます。 && を使用すると、関数は、右辺値参照で宣言されている場合でも、右辺値と左辺値の両方を受け入れることができます。
複数の引数リストでの転送
複数の引数リストがある場合引数リストでは、std::forward を使用して引数を個別に転送できます。
<code class="cpp">template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); }</code>
この場合、関数が任意のタイプの引数を受け入れることができるため、パラメーター宣言で && を使用することをお勧めします。次に、引数は std::forward:
<code class="cpp">doSomethingElse<val, Params...>(std::forward<Params>(args)...); }</code>
複数の転送
を使用して doSomethingElse に転送されます。同じ引数を複数の関数に転送すると、メモリが無効です。したがって、通常、同じ引数に対して std::forward を複数回使用することはお勧めできません。
以上が## C 関数テンプレートで std::forward を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。