lambda 作为接受其他参数的参数的初始化顺序

initialization order of lambda as parameter which accepts other parameters

本文关键字:参数 初始化 顺序 其他 lambda      更新时间:2023-10-16

我有一个参数(在本例中为 std::vector(,我需要传递给异步方法(最好通过移动(和回调 lambda。 下面的方法是否保证首先初始化 lambda(意味着正在复制向量(,以便我可以将向量移动到异步方法?

Method(std::vector<std::string> vec)
{
AsyncMethod(std::move(vec), [vec]() 
{
// act on vec
});
}

函数参数的计算顺序未指定,因此您不能依赖您的假设。解决方案如下。

Method(std::vector<std::string> vec)
{
auto l = [vec]() { /* Act on vec... */ };
AsyncMethod(std::move(vec), l);
}

根据AsyncMethod的签名,您甚至可能希望将 lambda 作为std::move(l)传递。这同样是安全的,因为矢量已事先复制到闭包中。