1
我想一个向量移动到拉姆达,但我得到一个编译错误:Visual Studio 2015中的通用Lambda Capture表达式:编译器错误或正确的行为?
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
不能被修改?
使用'mutable',以便lambda调用不是const。 – Zereges
所以经过快速搜索(见[这里](http://stackoverflow.com/questions/5501959/why-does-c0xs-lambda-require-mutable-keyword-for-capture-by-value-by-defau) )我发现这与移动捕捉没有任何关系,但通过价值捕获总是如此。非常奇怪的是,在使用lambda表达式之后,只有现在我才会遇到这种行为。 – Knitschi
如果你将其中的可变关键字的例子复制到一个答案,我会给你的观点;-) – Knitschi