[外部变量访问方式说明符] (参数表) -> 返回值类型
{
语句块
}
=
或&
,表示{}
中用到的、定义在{}
外面的变量在{}
中是否允许被改变。=
表示不允许,&
表示允许。当然,在{}
中也可以不使用定义在外面的变量。“-> 返回值类型”可以省略。[=] (int x, int y) -> bool {return x%10 < y%10; }
Lambda 表达式实际上是一个函数,只是它没有名字。下面的程序段使用了上面的 Lambda 表达式:int a[4] = {11, 2, 33, 4}; sort(a, a+4, [=](int x, int y) -> bool { return x%10 < y%10; } ); for_each(a, a+4, [=](int x) { cout << x << " ";} );这段程的输出结果是:
#include <iostream> #include <algorithm> using namespace std; int main() { int a[4] = { 1, 2, 3, 4 }; int total = 0; for_each(a, a + 4, [&](int & x) { total += x; x *= 2; }); cout << total << endl; //输出 10 for_each(a, a + 4, [=](int x) { cout << x << " "; }); return 0; }程序的输出结果如下:
[&]
表示该 Lambda 表达式中用到的外部变量 total 是传引用的,其值可以在表达式执行过程中被改变(如果使用[=]
,编译无法通过)。该 Lambda 表达式每次被 for_each 执行时,都将 a 中的一个元素累加到 total 上,然后将该元素加倍。[=, &x, &y]
表示外部变量 x、y 的值可以被修改,其余外部变量不能被修改;[&, x, y]
表示除 x、y 以外的外部变量,值都可以被修改。#include <iostream> using namespace std; int main() { int x = 100,y=200,z=300; auto ff = [=,&y,&z](int n) { cout <<x << endl; y++; z++; return n*n; }; cout << ff(15) << endl; cout << y << "," << z << endl; }程序的输出结果如下:
本文链接:http://task.lmcjl.com/news/17919.html