Lambda表达式C++11

一、Lambda表达式是什么

Lambda表达式是一种C++11新特性,可以用于创建匿名函数,类似于函数指针,但更加灵活和方便。Lambda表达式以一个包含形参列表和函数体的小括号内开头,后续跟着函数体,函数体可以是任意的有效的C++语句块。Lambda表达式可以访问外部作用域中的变量,这些变量可以被捕获并绑定到Lambda表达式的形参中。


auto sum = [] (int a, int b) -> int {
    return a + b;
};
cout << sum(1, 2) << endl;

上述Lambda表达式用于计算两个整数的和,使用auto关键字进行类型推导,使用[]表示没有捕获任何外部变量,括号内的int a, int b是Lambda表达式的形参列表,-> int是返回类型。

二、Lambda表达式的使用场景

Lambda表达式可以在很多场景下使用,比如常用的算法函数std::sortstd::for_each,可以使用Lambda表达式来自定义排序或者对元素进行处理。


// 使用Lambda表达式对容器进行排序
std::vector<int> vec = {23, 56, 12, 9, 62};
std::sort(vec.begin(), vec.end(), [] (int a, int b) {
    return a < b;
});

// 使用Lambda表达式遍历容器并输出
std::vector<int> vec = {23, 56, 12, 9, 62};
std::for_each(vec.begin(), vec.end(), [] (int a) {
    std::cout << a << " ";
});

上述代码中,第一个Lambda表达式用于对vec进行排序,括号内的int a, int b表示Lambda表达式的两个形参,a < b表示排序规则。第二个Lambda表达式用于遍历容器vec,括号内的int a表示遍历的元素,std::cout << a << " "表示对元素的处理。

三、Lambda表达式的捕获方式

Lambda表达式可以捕获外部作用域中的变量,并绑定到Lambda表达式的形参中。Lambda表达式可以采用三种捕获方式:

  • 值捕获:以=开头,表示以值的方式将变量绑定到形参中。
  • 引用捕获:以&开头,表示以引用的方式将变量绑定到形参中。
  • 混合捕获:同时使用=&,表示以值的方式将除指定变量外的所有变量绑定到形参中,以引用的方式将指定变量绑定到形参中。

// 值捕获示例
int a = 1, b = 2, c = 3;
auto func1 = [a, b] () {
    std::cout << "a = " << a << ", b = " << b << std::endl;
};
func1();

// 引用捕获示例
int a = 1, b = 2, c = 3;
auto func2 = [&a, &b] () {
    a = 4;
    b = 5;
};
func2();
std::cout << "a = " << a << ", b = " << b << std::endl;

// 混合捕获示例
int a = 1, b = 2, c = 3;
auto func3 = [=, &a] () {
    std::cout << "a = " << a << ", b = " << b << ", c = " << c << std::endl;
};
func3();

上述代码中,func1使用值捕获方式,捕获变量abfunc2使用引用捕获方式,引用变量ab,在func2中修改了变量ab的值,输出后发现变量ab的值已经修改。func3使用混合捕获方式,以值的方式捕获变量bc,以引用的方式捕获变量a,在Lambda表达式中使用了所有捕获的变量。

四、Lambda表达式的返回值

Lambda表达式可以有返回值,返回值类型可以使用auto进行类型推导,也可以使用-> 返回类型进行指定。Lambda表达式的返回值使用return语句来返回。


// Lambda表达式的返回值示例
auto func = [] (int a, int b) -> int {
    return a + b;
};
std::cout << func(1, 2) << std::endl;

上述代码中,Lambda表达式使用-> int来指定返回类型为int,使用return语句返回两个整数的和。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/229004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-10 12:09
下一篇 2024-12-10 12:09

相关推荐

  • 掌握lambda排序

    一、Lambda表达式简介 Lambda表达式(又称为函数式接口)为Java 8新增的一个功能,可使代码更加简洁。Lambda表达式的作用是向方法传递一个代码块,从而使代码更加具有…

    编程 2025-04-23
  • 关系表达式的深度剖析

    一、关系表达式的定义 关系表达式是指在关系数据库中为实现数据的最大效用和最快速度的数据检索和存储而定义的语法,表达式中的每一个元素(关系、属性、常量等)均是数据库的基本结构。 二、…

    编程 2025-04-23
  • lambda遍历map详解

    一、基础概念 1、lambda表达式的含义 lambda:arguemts:expression 其中,arguments表示lambda表达式的参数列表,expression则表…

    编程 2025-04-22
  • Java二元表达式:从基础到优化

    一、基础知识 Java二元表达式是指只有两个操作数以及一个运算符的表达式,例如1+2、a<b或 x*y 。在Java语言中,对二元表达式的处理十分重要且广泛,我们需要掌握基础…

    编程 2025-04-18
  • 切面表达式:细节决定成败

    一、切面表达式注解 注解是Java中非常重要的一种语法标记,Spring AOP中也通过注解的方式来定义切面。在定义切面时,可以使用@Aspect注解表示一个切面类,也可以使用@B…

    编程 2025-04-13
  • Cron表达式校验详解

    一、Cron表达式简介 Cron表达式是一种时间计划工具。它是由6或7个时间元素组成的字符串,用于指定时间表。 Cron触发器通常用于调度任务或批处理作业。 Cron表达式是指定执…

    编程 2025-04-12
  • 深入探究cron表达式验证

    一、验证cron表达式的重要性 1、cron表达式是一个非常常见的工具,用于定义如何在特定的间隔进行重复运行作业以及何时启动作业。 2、验证cron表达式的正确性非常重要,可以确保…

    编程 2025-02-25
  • lambda 求和的使用详解

    一、什么是lambda函数 lambda函数也被称为匿名函数,它是一种可以在代码中直接定义的小函数。它可以被用于一些特殊场合,例如在函数中作为参数传递、在列表、字典或集合等数据结构…

    编程 2025-02-24
  • Java表达式的全面解析

    一、操作符和操作数 在Java中,表达式是由操作符和操作数组成的。操作符分为算术操作符、关系操作符、逻辑操作符和位操作符。操作数可以是常量、变量、方法调用或者其他表达式。 //算术…

    编程 2025-02-17
  • 深入了解execution表达式

    随着Spring框架的不断发展,execution表达式作为Spring AOP切点表达式的核心语法之一,也逐渐成为了Java开发人员必备的技能之一。execution表达式主要作…

    编程 2025-02-17

发表回复

登录后才能评论