当前位置

网站首页> 程序设计 > 代码分享 > C/C++ > 浏览文章

C++中的Lambda表达式详解

作者:小梦 来源: 网络 时间: 2024-04-11 阅读:

Lambda表达式是C++11引入的一项新特性,它允许在代码中定义匿名函数,以便在需要时可以使用。Lambda表达式可以看作是一种语法糖,它使得编写简短的函数变得更加容易和方便。

Lambda表达式的语法形式如下:

捕获列表 mutable(可选) 异常属性 -> 返回类型 { // 函数体 }

其中,捕获列表是可选的,用于捕获一些外部变量,参数列表和返回类型也是可选的。Lambda表达式可以像函数一样使用,通过调用其名称并传递相应的参数,或者可以将其作为函数对象传递给其他函数。

Lambda表达式可以捕获外部变量,使得在函数体内部可以访问这些变量。捕获列表可以包括以下选项:

  • []:不捕获任何外部变量。
  • [&]:捕获所有外部变量,且通过引用捕获。
  • [=]:捕获所有外部变量,且通过值捕获。
  • [var1, var2, ...]:只捕获指定的外部变量。

Lambda表达式还支持mutable关键字,用于指定函数体是否可以修改捕获的外部变量。如果不使用mutable关键字,默认情况下是不允许修改捕获的外部变量的。

Lambda表达式的返回类型可以使用->符号指定,如果不指定,则会自动推断返回类型。在Lambda表达式中,可以使用C++的所有控制结构,包括if、for、while等等。同时,也可以使用函数指针和STL算法等等。

下面是一个简单的Lambda表达式的例子:

 
c
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}; int count = std::count_if(v.begin(), v.end(), [](int i) { return i % 2 == 0; }); std::cout << "The vector contains " << count << " even numbers.\n"; }

在这个例子中,Lambda表达式被用作count_if算法的第三个参数,用于计算向量中偶数的数量。Lambda表达式捕获了外部变量i,对每个元素判断是否是偶数。

在C++11之前,为了实现类似的功能,需要编写一个函数对象或一个函数指针,这使得代码显得冗长和复杂。Lambda表达式的引入使得编写简单的函数变得更加容易和方便。

相关阅读

网友最爱