我正在尝试将 vector 移动到 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
?
最佳答案
您的代码问题与广义 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
}
关于c++ - Visual Studio 2015 中的广义 Lambda 捕获表达式 : Compiler bug or correct behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39654449/