我正在尝试将矢量移动到lambda中,但是我收到了编译错误:
std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
vec2.push_back(1);
}
错误是错误C2663:“2个重载没有'this'指针的合法转换”
它在行vec2.push_back(1)
当我将示例更改为
时std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)](){
auto vec3 = std::move(vec2);
vec3.push_back(1);
}
它编译并运作。
这种行为是否正确,如果是这样,为什么vec2
不能被修改?
答案 0 :(得分:2)
代码的问题不必对广义lambda捕获做任何事情。默认情况下,lambda的调用运算符为const
,因此lambda捕获的对象将被视为const
。您可以使用mutable
关键字。这将使lambda的调用操作符非const
,允许您修改捕获的对象。
std::vector<int> vec {1,2,3};
auto lambda = [vec2 = std::move(vec)]() mutable {
vec2.push_back(1); // ^ note
}