功能之前[&]意味着什么?

Dro*_*ide 41 c++

以下代码行是什么意思?

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

....

}
Run Code Online (Sandbox Code Playgroud)

我的意思是,做[&]什么?它的功能是否与变量的名称相同?

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

use*_*661 73

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

要使用除传递给lambda之外的其他变量,我们可以使用capture-clause [].您可以通过引用和值进行捕获,您可以使用&和=分别指定:

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

  • @Bathsheba:还有解决方法:`auto&member_alias = this-> member; auto l = [&member_alias](){...};` (8认同)

Bat*_*eba 14

它是一个lambda捕获列表,已在C++中使用C++ 11标准定义.

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

确保被调用的对象在调用闭包时仍在范围内是你的工作,否则程序行为是未定义的.


小智 8

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

您可以提供变量列表,也可以使用"all"来捕获所有变量.[&]意味着通过引用捕获所有这些,并且[=]意味着按值捕获所有这些.

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