Lambda函数

本文参考:C++ primer Plus。

Lambda函数又称Lambda表达式。

1. lambda函数的基本形式。

lambda函数与普通的函数类似,在普通函数上进行了匿名和省略。其基本形式:[](){}

[](){}; 
// [] : 代替函数名
// () : 代替函数传入的参数
// {} : 函数的实现

//例如:
[](int x) {return x % 3 == 0};   // lambda表达式
bool function(int x) {return x % 3 == 0};  //与上面的lambda表达式的效果相同

2. lambda函数的返回值

lambda函数没有声明返回类型,返回类型相当于使用decltyp根据返回值推断得到。如下所示:

[](int x) {return x % 3 == 0};   // lambda表达式

注意:仅当lambda表达式完全由一条返回语句组成,自动推断才管用。否则采用新增的返回类型后置法实现。

[](double x)->double{int y = x; return x - y};  // return  type is double

3. lambda参数的获取

lambda可以访问作用域内的任何动态变量,可将要捕获使用的变量,放到中括号内,根据需要有如下几种方式。

[z] 			// 按值访问变量z
[&z]			// 按引用访问变量z
[&]				// 按引用访问所有的动态变量
[=]				// 按值访问所有的动态变量
[&,z]			// 按值访问z,按引用访问其他动态变量

//例如:
[&count][int x] {count += x; return count;};

4. lambda指定名称

可以给lambda表达式指定名称,在程序中多次调用。如下所示:

auto mods = [](int x) {return x % 3 == 0};  // 指定lambda表达式的名称

count1 = std::count_if(n1.begin(), n1.end(), mods); // 按名称调用表达式
count2 = std::count_if(n2.begin(), n2.end(), mods); // 再次按名称访问lambda表达式

5. lambda表达式的用途

lambda与函数有很多相似的地方,但是也有一些区别。

  • 简洁

    lambda表达式,形式简单。而且定义和使用的位置离得比较近,代码阅读更加简单直观。

  • 定义在函数内部

    lambda可以定义在函数内部,函数不能定义在其他函数内部。

  • 根据类型,自动识别返回值类型

    可以根据返回语句,自动识别返回值类型(仅当lambda表达式完全由一条返回语句组成)

  • 访问作用域内的任何动态变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值