(C++11)Lambda表达式(匿名函数)和为什么使用Lanbda表达式

时间:2021-12-10 18:54:25

Lambda表达式(匿名函数)和为什么使用Lanbda表达式

1.什么是Lambda表达式

名称Lanbda来自landba caculus(λ演算)--一种定义和应用函数的数学系统。这个系统能让您使用匿名函数--即无需给函数命名。在C++11中,对于接受函数指针或函数符的的函数,可使用匿名函数定义(lambda)作为其参数。与前述函数f3对应的lambda如下:

bool f3(int x){return x%3==0;}(计算是否被3整除)

对应lambda表达式:

[](int x){return x%3==0;}

差别有两个:使用[]替代了函数名(这就是匿名函数的由来);没有声明返回类型。返回类型相当于使用decltyp根据返回值推断得到,这里为bool.如果lambda不包含返回语句,推断出返回类型将为void.就这个示例而言,你讲以如下方式使用该lambda:

std::vector<int> numbers(1000);

count3=std::count_if(numbers.begin(),numbers.end(),[](int x ){return x% 3==0;})

(count_if()的前两个参数对应指定区间,二第三个参数影视一个返回true或false的函数对象。函数count_if()返回为true的次数)

也就是说,使用整个lambda表达式替换函数指针或函数符构造函数。

仅当lambda表达式完全由一条返回语句组成时,自动类型腿短才管用:否则,需要使用新增的返回类型后置语法:

[](double x)->double(int y=x;return x-y;)//返回类型为double

2.为什么使用Lanbda表达式

(C++11)Lambda表达式(匿名函数)和为什么使用Lanbda表达式(C++11)Lambda表达式(匿名函数)和为什么使用Lanbda表达式(C++11)Lambda表达式(匿名函数)和为什么使用Lanbda表达式(C++11)Lambda表达式(匿名函数)和为什么使用Lanbda表达式