C ++ lambda表达式的含义

时间:2018-04-01 08:18:48

标签: c++ lambda c++14

我正在学习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表达式中使用它?

4 个答案:

答案 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之外的影响。因此,mn得到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);  
  1. 捕获列表,即[&,n]建议捕获所有内容作为参考,n作为值。
  2. (int a)代表参数列表。
  3. mutable关键字建议您可以使用闭包将捕获的n值突变。换句话说,this指针是可变的。
  4. (4);最后调用带有传递参数4的lambda函数。

我在同一篇文章上写过一篇文章-> Lambda function in C++ with example。如果您有时间可以考虑。