C ++ 11 std :: forward_as_tuple和std :: forward

问题描述 投票:8回答:4

当我将函数参数用作std::forward的参数时,是否应该std::forward_as_tuple我的函数参数?

template<class ... List>
void fn(List&& ... list){
   // do I need this forward?
   call_fn( forward_as_tuple( forward<List>(list)... ) );  
}

我知道它们将被存储为右值引用,但是还有什么我应该考虑的吗?

c++ templates c++11 tuples perfect-forwarding
4个回答
7
投票

您必须使用std::forward才能将自变量的值类别保留为fn()。由于参数的名称在fn之内,因此它们是左值,而没有std::forward的参数将始终按原样传递给std::forward_as_tuple


2
投票

[是,您几乎肯定要在这里使用std::forward,这是假设在list被调用之后未使用call_fn中的参数。 这是std::forward的典型用例,因为您要行使完美转发的语义


1
投票

是,如果您想保留完美的转发语义。在您的示例中:


0
投票

如果可以相信cppreference,答案实际上是no

© www.soinside.com 2019 - 2024. All rights reserved.