C++11:lambda函数的详细使用

目录:

1. lambda 函数概述

2、常见的坑:

3、实例:

正文:

1. lambda 函数概述

lambda 表达式是一种匿名函数,即没有函数名的函数;该匿名函数是由数学中的λ演算而来的。通常情况下,lambda函数的语法定义为:

(1) lambda 函数中“捕捉列表”详解

C++11中的lambda函数,其中的“捕捉列表”是由0个或多个“捕捉项”组成,并以逗号“,”分隔。捕捉列表有如下几种形式:

        1)[var] 表示值传递方式捕捉变量var

        2)[=] 表示值传递方式捕捉所有父作用域的变量(包括this)

        3)[&var] 表示引用传递捕捉变量var

        4)[&] 表示引用传递捕捉所有父作用域的比哪里(包括this)

        5)[this] 表示值传递方式捕捉当前的this指针,目的是可以在lamda中使用当前类函数和成员变量。

闭包的优缺点很清晰,都是同一个:可以不通过传参获取调用者的上下文环境;

2、常见的坑:

不建议两种默认的捕获模式:

A、按值捕获——>捕获时机

B、按引用捕获——>悬空引用

3、实例:

int var1 = 100;

std::string var2 = "hello";

auto myLambda = [var1, &var2](int param)->std::string {

        var2.append(std::to_string(var1));

        var2.append(std::to_string(param));

        return var2;

};

 

上面的代码涉及三个概念:

1)lambda表达式(lambda expression)

2)闭包(closure)

3)闭包类(closure class)

例如,在上面这段代码中:

定义了一个变量:myLambda,它就是“闭包

myLambda 的类型是一个编译器生成的匿名的类,也就是“闭包类”;

这个闭包类是由等号右边的”lambda表达式”生成的,这个lambda表达式

按值捕获了var1;按引用捕获了var2;

并且接受一个int型参数;

返回一个std::string对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值