- 0 简介
- 1 候选变更
- 2 C++核心语言的扩充
- 3 核心语言的运行期表现强化
- 4 核心语言建构期表现的加强
- 5 核心语言使用性的加强
- 6 核心语言性能的提升
7 C++标准程序库的变化
Lambda函数与表达式(匿名函数)
语法说明:
(1)Lambda表达式的引入标志,在[]里面可以填入=或&表示该lambda表达式捕获(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,&表示一引用的方式;=表明以值传递的方式捕获,除非专门指出。
(2)Lambda表达式的参数列表
(3)mutable 标识
(4)异常标识
(5)返回值
(6)函数体,也就是lambda表达式需要进行的实际操作
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
int x = 10;
int y = 3;
int z ;
//以值传递的方式访问x,y所以x,y的值并没有发生改变
z = [=]()mutable throw() -> int { int n = x + y; x = y ; y = n; return n;}();
cout<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
//以引用的方式访问x,y所以x,y的值发生改变
z = [&]()mutable throw() -> int { int n = x + y; x = y ; y = n; return n;}();
cout<<" x: "<<x<<" y: "<<y<<" z: "<<z<<endl;
//如何向lambda表达式里面传递参数
int n = [] (int x, int y) { return x + y; }(5, 4);
cout<<" n: "<<n<<endl;
//像调用函数一样使用lambda表达式
auto f = [] (int x, int y) { return x + y; };
cout << f(21, 12) << endl;
//Lambda表达式与STL算法一起使用,输出数组
int a[10] = {0};
srand(time(NULL));
generate(a,a+10,[]()->int { return rand() % 100; });
cout<<"Before sort: "<<endl;
for_each(a, a+10, [&](int i){ cout<< i <<" "; });
cout<<endl;
cout<<"After sort"<<endl;
sort(a,a+10);
for_each(a, a+10, [&](int i){ cout<< i <<" "; });
cout<<endl;
//Lambda表达式的嵌套
int m = [](int x){ return [](int y) { return y * 2; }(x) + 3; }(5);
cout << m << endl;
return 0;
}