C++ lambda表达式

  lanmbda表达式形式如下:

  [capture list] (parameter list) ->return type { function body }

 捕获列表

  capture list 为捕获列表,是函数体内局部变量的列表(通常为空)。

  捕获有值捕获和引用捕获两种形式:

  auto f1 = [v1]{ return v1; };  //值捕获

  auto f2 = [&v2] { return v2;}; //引用捕获

  隐式捕获

  在捕获列表中填写=(值捕获)或&(引用捕获)来让编译器推断捕获列表。

  混用显示捕获和隐式捕获时,列表中第一个元素必须是&或=,&和=不能同时存在。

  并且在使用&后,显示捕获不能有引用捕获;使用=亦然。

  可变lambda

  如果希望能改变捕获的值,应在参数列表首加上关键字mutable:

  auto f = [v1] () mutable { return ++v1; };  //v1会被改变

 传递参数

  lambda表达式不能含有默认参数。

 返回值

  默认情况下,如果lamba体内包含除return外语句,编译器假定返回void,需要自定返回类型,需要使用尾置返回类型:

  auto f = [] (int i) -> int  { if(i>0) return i; else return -i; };

  

posted @ 2019-02-28 15:50  我是好人007  阅读(268)  评论(0编辑  收藏  举报