C++ lamba表达式

C++11中引入了lambda表达式,提供了一个匿名函数的简洁语法。lambda表达式是一个非常实用的C++新特性,它允许我们直接在代码中定义简单的函数对象。本文将通过示例介绍C++ lambda表达式的语法、用法和优势。

lambda表达式的语法

C++ lambda表达式的语法如下:

[capture](parameters) -> returnType { body }

其中,[]内是捕获子句,()内是参数列表,:后是返回值类型,{}内是函数体。下面是一个简单例子:

auto add = [](int a, int b) {
  return a + b;
};

这个lambda表达式定义了一个接受两个int参数,返回它们和的函数对象。

捕获变量

lambda可以捕获作用域内的变量,例如:

int x = 1;
auto getX = [x] { return x; }; 

这个lambda表达式捕获了变量x,可以在函数体内继续使用它。

我们也可以通过引用捕获变量:

int x = 1;
auto addX = [&x](int y) { 
  x += y;
  return x;
};

这个lambda通过引用捕获x,可以修改x的值。

lambda的应用

一个常见的lambda用法是和标准算法结合使用:

std::vector<int> nums{1,2,3,4}; 
int sum = 0;
std::for_each(nums.begin(), nums.end(), [&sum](int x) {
  sum += x; 
});

这个例子使用lambda作为for_each的参数,计算nums向量的总和。

lambda也非常适合作为回调函数:

btn.setOnClickListener([] {
  //点击时运行的代码
});

lambda优势

相比普通函数,lambda表达式的优势在于:

  • 简洁方便,可以直接内联,避免定义单独的函数
  • 可以捕获作用域内的变量
  • 类型推导,简化代码
  • 作为函数对象使用更加灵活

综上所述,C++11的lambda表达式让函数对象的创建更简单直观。它是函数式编程在C++中的重要实现,非常实用。掌握lambda表达式可以帮助我们减少代码量,写出更优雅简洁的C++程序。