浅谈lambda表达式

原创 2015年11月20日 13:01:16

刚开始看lambda表达式有种懵逼的感觉,和平时的语法习惯太格格不入了,但是后来看了一些介绍后才发现这个新特性还是挺好用的,要问我lambda表达式是什么,其实它是一个函数,一个匿名函数,通常是我们需要一个函数,但是又不想费神去命名一个函数,这个时候我们可以使用lambda表达式。

lambda表达式是由这几部分构成的:



1.[] Capture 子句(在 C++ 规范中也称为 lambda 引导。)
2.() 参数列表(也称为 lambda 声明符)
3. mutable 可变规范,表示运行函数体修改通过拷贝捕获的参数
4.异常规范,声明可能抛出的异常
5.尾随返回类型。
6.{}“lambda 体
需要特别注意的是,除了Capture字句和lambda函数体不能省略之外,剩下的四部分均可以根据要求省略。

比如我想写一个函数打印hello world,按照函数习惯需要命名一个函数,然后在主函数中调用,但是用lambda表达式我们可以这样写:

int main()
{
	auto f = [](){cout << "Hello World" <<endl; };
	f();
	return 0;
}
运行结果会打印输出Hello World。
下面我们再来看一个小程序:

int main()
{
	int i = 0;
	cout << i << endl;
	auto f=[=]()mutable{cout << ++i << endl; };
	f();
	cout << i << endl;
	return 0;
}
输出结果是0 1 0,我们发现capture字句中多了个=符号,这代表把外部变量i拷贝一份传进了函数体进行操作,所以才会输出0 1 0.要注意的是,此处的mutable不能省略,因为我们在函数体中改变了外部变量i的值。

如果把=改成&呢?我们来试一试:

auto f=[&]()mutable{cout << ++i << endl; };

输出结果:0 1 1.引用改变的是自身的值。

lambda表达式有什么用呢? lambda的作用就是创建一个临时匿名函数,想想有STL算法中很多需要传递谓词函数,比如count_if。假如我有一个字符串容器,我需要统计长度大于3的个数,则可以这样:

vector<string> s = { "1", "11", "111", "1111", "11111", "111111", "1111111" };
cout << count_if(begin(s), end(s), [](string s){return s.size() > 4; });

这样比较简洁,不必再重新声明一个函数了。


阅读后请留下你们的脚印,欢迎斧正,谢谢!


浅谈Lambda表达式详解

 http://www.cnblogs.com/kongxiaoshuang/p/6366041.html
  • liuqiaoying_lqy
  • liuqiaoying_lqy
  • 2017年11月14日 16:09
  • 29

c++11 lambda表达式浅谈

最近在看各种源代码。
  • u012495126
  • u012495126
  • 2014年10月19日 14:45
  • 245

C#高级编程四十三天----Lambda表达式

Lambda表达式   案例: using System; using System.Collections.Generic; using System.Linq; using Syste...
  • shanyongxu
  • shanyongxu
  • 2015年07月20日 18:09
  • 749

lambda表达式的使用详解

首先我们来看一段简单的代码: interface ILambdaTest1{ void print(String s); } public class LambdaTest1 { public ...
  • peiyuWang_2015
  • peiyuWang_2015
  • 2017年05月22日 15:05
  • 1224

Java8 Lambda表达式介绍

欢迎进入我的博客:blog.scarlettbai.com查看更多文章 Lambda表达式是Java8里的一个重要特性,发布这么久了,最近在学swift语言时发现了其中的闭包的概念其实跟Lambda表...
  • silk_bar
  • silk_bar
  • 2016年04月02日 00:09
  • 1257

lambda表达式示例讲解

最近由于使用elasticsearch版本更新到5.0了,看到5.0版本源码中使用了很多的lambda表达式,于是就上网找资料简单研究一下,以下就通过代码示例来说明其用法,这也是最通俗易懂的表达方式了...
  • jianjun200607
  • jianjun200607
  • 2016年11月22日 17:49
  • 569

Java8 新特性 lambda表达式详解

java8新特性 lambda表达式详解
  • xiaochuanding
  • xiaochuanding
  • 2017年02月17日 16:41
  • 3755

python Lambda 表达式

匿名函数 lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方 举个例子: >>> def f(x,y): ... return x*y ... >>> f(2,3)...
  • chenguibao
  • chenguibao
  • 2015年08月30日 13:41
  • 934

Lambda Not In

select * from table1 where No not in(select subNo from table2) 对应的lambda表达式: var query=table...
  • xiuping05214
  • xiuping05214
  • 2014年05月08日 09:42
  • 474

java8:Lambda表达式入门

什么是Lamda表达式? Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码...
  • zhiwenyan
  • zhiwenyan
  • 2017年04月22日 23:36
  • 977
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈lambda表达式
举报原因:
原因补充:

(最多只允许输入30个字)