标签:for_each param error style amp bar ram 基本用法 ++
lambda来源于函数式编程的概念,也是现代语言编程的特点。
首先看看lambda的基本用法:
1 [capture] (params) opt->return {body;}
其中, capture 是捕获列表(即闭包中的自由变量):
params 是参数表;opt是函数选项;return是返回值类型;body是函数体。
lambda表达式的类型在C++11中被称之为“闭包类型”。我们可以认为它是一个带有operator()的类。因此,可以使用 std::function 和 std::bind 来存储其类型:
1 std::function<int(int)> f1 = [](int i) {return i; }; 2 std::function<int(void)> f2 = std::bind([](int a){ return a; });
1 int a = 0; 2 int b = 1; 3 auto f1 = []{return a; }; //error,没有捕获外部变量 4 auto f2 = [&]{return a++; }; 5 auto f3 = [=]{return a; }; 6 auto f4 = [=]{return a++; }; //error,a是以复制方式捕获的,无法修改 7 auto f5 = [a]{return a + b; }; //error,没有捕获变量b 8 auto f6 = [a, &b]{return a + (b++); }; 9 auto f7 = [=, &b]{return a + (b++); };
举个栗子:
std::vector<int> v = {1, 2, 3, 4}; int sum = 0; for_each(v.begin(), v.end(), [&sum](int value) { sum += value; }); std::cout << "sum:" << sum << endl;
lambda表达式还是比较简单的,理解闭包之后就能轻松地用好lambda啦。
标签:for_each param error style amp bar ram 基本用法 ++
原文地址:http://www.cnblogs.com/graves/p/6091533.html