【发布时间】:2015-10-07 17:15:17
【问题描述】:
考虑以下几点:
void test( const int &value )
{
auto testConstRefMutableCopy = [value] () mutable {
value = 2; // compile error: Cannot assign to a variable captured by copy in a non-mutable lambda
};
int valueCopy = value;
auto testCopyMutableCopy = [valueCopy] () mutable {
valueCopy = 2; // compiles OK
};
}
当我将 lambda 声明为可变并按值捕获 value(我认为是它的副本)时,为什么第一个版本会出现编译错误?
使用 clang (x86_64-apple-darwin14.3.0)(错误消息的来源)和 Visual C++ (vc120) 进行测试。
【问题讨论】:
-
GCC 主干也是(“错误:分配只读变量‘值’”)
-
源变量的
const-ness 似乎胜过lambda 的mutable-ness。将其更改为[value=value]可以解决 gcc 中的错误。