C++11匿名函数(lambda函数,lambda表达式)

Lambda 表达式的定义形式如下:

// [外部变量访问方式说明符] (参数表) -> 返回值类型 {语句块}
[capture](parameters)->return-type{body}

其中:

  • “外部变量访问方式说明符”可以是=或&,表示 {} 中用到的、定义在 {} 外面的变量在 {} 中是否允许被改变。
  • 在 {} 中也可以不使用定义在外面的变量。
  • 如果没有参数,空的圆括号 () 可以省略
  • “-> 返回值类型”可以省略。

具体含义如下:

[]        //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y]   //x 按值捕获, y 按引用捕获.
[&]       //用到的任何外部变量都隐式按引用捕获
[=]       //用到的任何外部变量都隐式按值捕获
[&, x]    //x显式地按值捕获. 其它变量按引用捕获
[=, &z]   //z按引用捕获. 其它变量按值捕获

例子:
下面是一个合法的Lambda表达式:

[=] (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 << " ";} );

这段程的输出结果是:
11 2 33 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章