以下代码行是什么意思?
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使用引用捕获小智 8
它定义了一个Lambda表达式,它基本上是一个没有名称的函数.它有参数列表(int x, const std::vector<int>&vect)和函数体{ ... }.但它在开始时也有一个捕获列表[&].如果要从lambda表达式的主体访问变量(不是参数),则必须使表达式"自带变量",以便稍后当lambda表达式为变量时可以使用该变量.执行.
您可以提供变量列表,也可以使用"all"来捕获所有变量.[&]意味着通过引用捕获所有这些,并且[=]意味着按值捕获所有这些.
(如果你使用[&],请注意lambda主体将在执行lambda时使用变量的值,而不是创建lambda时有效的值!这是因为你没有值的副本,只是对它的引用.)