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)...);
}
我对std::forward
有点迷惑,我很乐意使用一些清理工具。
https://stackoverflow.com/questions/7257144
复制相似问题