写点什么

请详述 c++ 中 lambda 表达式使用

作者:linux大本营
  • 2023-04-22
    湖南
  • 本文字数:844 字

    阅读完需:约 3 分钟

C++11 引入了 lambda 表达式,它是一个匿名函数对象,可以在代码中被直接定义和使用。lambda 表达式的格式如下:


[capture list] (parameters) -> return type { function body }
复制代码


其中,capture list指定了 lambda 表达式中所使用的外部变量,可以使用[]来表示不捕获任何外部变量,也可以使用&=来捕获所有外部变量,具体用法如下:


  • []:不捕获任何外部变量。

  • [variable]:捕获变量variable,但不改变其值。如果该变量为值类型,则会进行复制;如果为引用类型,则会保留对原变量的引用。

  • [&]:捕获所有外部变量,并将它们作为引用传递。

  • [=]:捕获所有外部变量,并将它们作为值传递。如果要修改某个变量的值,则需要使用mutable关键字。

  • [&, variable]:捕获所有外部变量,并将它们作为引用传递,但除了变量variable以外,其他变量都是值传递。

  • [=, &variable]:捕获所有外部变量,并将它们作为值传递,但除了变量variable以外,其他变量都是引用传递。


parameters指定了 lambda 表达式的参数列表,与普通函数的参数列表类似。


return type指定了 lambda 表达式的返回类型,如果省略则会根据函数体自动推断出返回类型。


function body是 lambda 表达式的函数体,与普通函数的函数体类似。


以下是一个使用 lambda 表达式的示例:


#include <iostream>#include <vector>#include <algorithm>
int main() { std::vector<int> numbers{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}; // lambda表达式:从小到大排序 std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); // lambda表达式:输出所有奇数 std::for_each(numbers.begin(), numbers.end(), [](int n) { if (n % 2 != 0) std::cout << n << " "; }); return 0;}
复制代码


在这个示例中,我们使用了两个 lambda 表达式。第一个表达式用于对 vector 进行从小到大的排序;第二个表达式用于输出所有奇数。


相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址

c/c++后端技术交流群:812855908

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
请详述c++中 lambda表达式使用_Lambda_linux大本营_InfoQ写作社区