为什么值为值的值为const,而不是按引用对象捕获:
int a;
auto compile_error = [=]()
{
a = 1;
}
auto compiles_ok = [&]()
{
a = 1;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎不合逻辑,但它似乎是标准的?特别是因为捕获值的不需要的修改可能是令人讨厌的错误,但是后果仅限于lambda范围的可能性很高,而通过引用捕获的对象的不需要的修改通常会导致更严重的影响.
那么为什么不默认使用const引用?或者至少支持[const&]和[&]?这个设计的原因是什么?
作为解决方法,您可能应该使用由值捕获的std :: cref包装的const引用?