auto myLambda = [](auto&& val_)
{
val_ *= 2;
return std::forward<decltype(val_)>(val_);
};
int someNum = 55;
auto&& ret1 = myLambda(3);
auto&& ret2 = myLambda(someNum);
我正在尝试使用lambda的高级功能,但是我无法通过完美转发来返回参数。 ret1
和ret2
变量都扩展为int &&。我很确定我可以将args从lamda对象内部完美地转发到另一个函数。我尝试将返回类型更改为decltype(auto)
,但没有运气。我们可以说lambda无法通过完美的转发方式放心返回吗?
如果我为此编写模板函数,则可以实现完美的转发。
答案 0 :(得分:6)
lambda不会返回对val_
的引用(它只会返回val_
的值)。如果要执行此操作,则必须显式提供返回类型:
auto myLambda = [](auto&& val_) -> decltype(val_)
{
val_ *= 2;
return std::forward<decltype(val_)>(val_);
};