Skip to content
On this page

CPP_Lambda表达式


标签:CPP/基础  
  • Lambda表达式
  • C++11 后支持
  • 格式 [捕获列表] (形参列表) mutable -> 返回值类型 {函数体}
    1. [] 可捕获外界变量供表达式使用 [var1, var2]
    2. [=] 编译器将根据内部使用,自动捕外部作用域对应变量
      • 如果没有 mutable 修饰,那么捕获参数默认只读
      • 如果有 mutable 修饰,则可以修改
    3. [&var1, &var2] 使用引用捕获,参数和外部变量将是同一个值
    4. [&] 编译器根据内部使用,自动捕获对外部作用域应变量的引用
      • 无论是否有 mutable 修饰,都可以在表达式更改捕获
    5. [&, k] 除了 k 是值捕获,其余是引用捕获
    6. [=, &var1] 除了 var1 是引用捕获,其余为值捕获
    7. (参数列表) 和一般函数相同
    8. -> 返回值类型 可省略,编译器将自动推导(如果返回整数,定义为浮点数,则以定义的为主)
  • 匿名表达式实际上是通过类实现的
cpp
#include <iostream>

using namespace std;

int main() {
  int m = 520;
  int n = 1314;
  int k = 999;

  // lambda表达式
  auto fun = [&]() mutable {
    cout << "m = " << m << endl;
    cout << "n = " << n << endl;
    cout << "k = " << k << endl;
  };

  fun();
}
cpp
#include <iostream>

using namespace std;

int main()
{
  int m = 520;
  int n = 1314;
  int k = 999;
  int g = 111;
    
  class __lambda_12_14
  {
    public: 
    inline /*constexpr */ void operator()()
    {
      std::operator<<(std::cout, "m = ").operator<<(m).operator<<(std::endl);
      std::operator<<(std::cout, "n = ").operator<<(n).operator<<(std::endl);
      std::operator<<(std::cout, "k = ").operator<<(k).operator<<(std::endl);
    }
    
    private: 
    int m;
    int n;
    int k;
    
    public:
    __lambda_12_14(int & _m, int & _n, int & _k)
    : m{_m}
    , n{_n}
    , k{_k}
    {}
    
  };
  
  __lambda_12_14 fun = __lambda_12_14{m, n, k};
  fun.operator()();
  return 0;
}

Last updated: