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