我有一个参数(在本例中为std :: vector),需要将其传递给异步方法(最好通过move)和回调lambda。 下面的方法是否保证lambda将首先被初始化(这意味着要复制矢量),以便我可以将矢量移到异步方法?
Method(std::vector<std::string> vec)
{
AsyncMethod(std::move(vec), [vec]()
{
// act on vec
});
}
答案 0 :(得分:3)
函数参数的求值顺序未指定,因此您不能依赖您的假设。解决方法如下。
Method(std::vector<std::string> vec)
{
auto l = [vec]() { /* Act on vec... */ };
AsyncMethod(std::move(vec), l);
}
根据AsyncMethod
的签名,您甚至可能希望将lambda传递为std::move(l)
。再次安全,因为矢量已预先复制到闭包中。