相关疑难解决方法(0)

Lambda:为什么按值捕获值为const,而不是按引用值捕获?

为什么值为值的值为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引用?

c++ lambda const capture c++11

7
推荐指数
2
解决办法
8228
查看次数

标签 统计

c++ ×1

c++11 ×1

capture ×1

const ×1

lambda ×1