当我将函数参数用作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)... ) );
}
我知道它们将被存储为右值引用,但是还有什么我应该考虑的吗?
您必须使用std::forward
才能将自变量的值类别保留为fn()
。由于参数的名称在fn
之内,因此它们是左值,而没有std::forward
的参数将始终按原样传递给std::forward_as_tuple
。
[是,您几乎肯定要在这里使用std::forward
,这是假设在list
被调用之后未使用call_fn
中的参数。 这是std::forward
的典型用例,因为您要行使完美转发的语义
是,如果您想保留完美的转发语义。在您的示例中:
如果可以相信cppreference,答案实际上是no