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)...); } 另外,如果在函数中使用两次参数,即同时转发到两个函数,使用它是否明智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