我正在学习C ++中的lambda表达式。我在https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp
找到了以下代码 #include <iostream>
using namespace std;
int main()
{
int m = 0;
int n = 0;
[&, n] (int a) mutable { m = ++n + a; }(4);
cout << m << endl << n << endl;
}
输出: 五 0
我无法理解(4)lambda表达式的行。这个(4)是什么意思以及如何在lambda表达式中使用它?
答案 0 :(得分:2)
表达式[&, n] (int a) mutable { m = ++n + a; }
创建一个临时可调用对象。 (4)
部分只是“调用”该对象,将4
作为参数传递。
整个表达式[&, n] (int a) mutable { m = ++n + a; }(4)
大致相当于
auto temporary_function_object = [&, n] (int a) mutable { m = ++n + a; };
temporary_function_object(4);
答案 1 :(得分:2)
这有点类似于
int m = 0;
int n = 0;
void f(int a)
{
m = n + 1 + a;
}
int main()
{
f(4);
}
答案 2 :(得分:1)
这是简化的代码。变量m
将通过引用捕获,变量n
将通过lambda中的值捕获。
由于它被声明为可变变量n不会受到lambda之外的影响。因此,m
和n
得到5和0。如果您使用[=]
,则会打印0 0
#include <iostream>
using namespace std;
int main()
{
int m = 0;
int n = 0;
auto func = [&, n] (int a) mutable { m = ++n + a; };
func(4);
cout << m << endl << n << endl;
}
因此。
auto func =[]() { cout << " Hello \n"; }; // this is similar to func definition
func(); // call here to execute
或者你可以直接这样打电话:
[]() { cout << " Hello \n"; }();
答案 3 :(得分:0)
如果您对Lambda的基本概念了解清楚,那么对您来说更简单
[&, n] (int a) mutable { m = ++n + a; }(4);
[&,n]
建议捕获所有内容作为参考,n
作为值。(int a)
代表参数列表。mutable
关键字建议您可以使用闭包将捕获的n值突变。换句话说,this
指针是可变的。(4);
最后调用带有传递参数4
的lambda函数。我在同一篇文章上写过一篇文章-> Lambda function in C++ with example。如果您有时间可以考虑。