3
std :: forwardを使用して引数を転送するのはいつですか?
C ++ 0xは、次の使用例を示していますstd::forward。 template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } いつ使用すると有利std::forwardですか? また、&&パラメーター宣言で使用する必要がありますが、すべての場合に有効ですか?関数がその中で宣言さ&&れている場合、関数に一時変数を渡す必要があると思ったので、任意のパラメーターでfooを呼び出すことができますか? 最後に、次のような関数呼び出しがある場合: template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } 代わりにこれを使用する必要があります: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } また、関数でパラメータを2回使用する場合、つまり2つの関数に同時に転送する場合、使用するのが賢明std::forwardですか?しませんstd::forwardメモリを移動し、二回の一時的に同じことを変換し、それが二次利用のために無効にしますか?次のコードは大丈夫でしょうか: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); …
155
c++
templates
forwarding
c++11