功能之前[&]的含义是什么?

时间:2016-09-30 10:15:22

标签: c++

以下代码行是什么意思?

auto allowed = [&](int x, const std::vector<int>&vect){

....

}

我的意思是,[&]做了什么?它是否与变量??

的名称相同

因为它以这种方式使用:unsigned short ok = get_allowed(0, vect);

3 个答案:

答案 0 :(得分:68)

这意味着lambda函数将通过引用捕获范围内的所有变量。

要使用除传递给lambda之外的其他变量,我们可以使用capture-clause []。 您可以使用参考和值进行捕获,您可以使用&amp;和=分别:

  • [=]按值
  • 捕获范围内的所有变量
  • [&]通过引用
  • 捕获范围内的所有变量
  • [&var]通过引用
  • 捕获var
  • [&, var]指定默认值 捕获方式是通过引用,我们想要捕获var
  • [=, &var]默认情况下按值捕获范围内的变量,但使用引用捕获var 代替

答案 1 :(得分:14)

它是 lambda捕获列表,并且已在C ++中使用C ++ 11标准定义。

[&]这意味着您希望通过lambda函数中当前范围内的引用访问每个变量

确保被引用的对象在调用closure时仍在范围内是您的工作,否则程序行为未定义

答案 2 :(得分:8)

它定义了一个Lambda表达式,它基本上是一个没有名称的函数。它有参数列表processDeviceOffline {} (undefined) 和函数体(int x, const std::vector<int>&vect)。但它在开头{ ... }也有一个捕获列表。如果要从lambda表达式的主体访问变量(不是参数),则必须使表达式“自带变量”,以便稍后当lambda表达式为变量时可以使用该变量。执行。

您可以提供变量列表,也可以使用“all”来捕获所有变量。 [&]表示通过引用捕获所有这些内容,[&]意味着按值捕获所有这些内容。

(如果使用[=],请注意lambda主体将在执行lambda时使用变量的值,而不是创建lambda时有效的值!这是因为你没有值的副本,只有对它的引用。)