以下代码行是什么意思?
auto allowed = [&](int x, const std::vector<int>&vect){
....
}
我的意思是,[&]
做了什么?它是否与变量??
因为它以这种方式使用:unsigned short ok = get_allowed(0, vect);
答案 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时有效的值!这是因为你没有值的副本,只有对它的引用。)