首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候使用std::forward来转发参数?

什么时候使用std::forward来转发参数?
EN

Stack Overflow用户
提问于 2011-08-31 20:52:47
回答 1查看 65.1K关注 0票数 160

C++0x显示了一个使用std::forward的示例

代码语言:javascript
复制
template<class T>
void foo(T&& arg) 
{
  bar(std::forward<T>(arg));
}

什么时候总是使用std::forward是有利的?

另外,它需要在参数声明中使用&&,它在所有情况下都有效吗?我认为如果函数中声明了&&,那么必须将临时变量传递给函数,那么foo可以用任何参数调用吗?

最后,如果我有一个像这样的函数调用:

代码语言:javascript
复制
template<int val, typename... Params>
void doSomething(Params... args) {
  doSomethingElse<val, Params...>(args...);
}

我应该用这个来代替吗:

代码语言:javascript
复制
template<int val, typename... Params>
void doSomething(Params&&... args) {
  doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}

另外,如果在函数中使用了两次参数,即同时转发到两个函数,使用std::forward是否明智?std::forward会不会两次将相同的东西转换为临时对象,从而移动内存并使其在第二次使用时无效?下面的代码可以吗?

代码语言:javascript
复制
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有点迷惑,我很乐意使用一些清理工具。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7257144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档