C++ [](){} 与 C++11 lambda表达式

C++11中引入了lambda表达式。

语法格式:

这里假设我们定义了一个如上图的lambda表达式。现在来介绍途中标有编号的各个部分是什么意思。

  1. Lambda表达式的引入标志,在‘[]’里面可以填入‘=’或‘&’表示该lambda表达式“捕获”(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,‘&’表示一引用的方式;‘=’表明以值传递的方式捕获,除非专门指出。
  2. Lambda表达式的参数列表
  3. Mutable 标识
  4. 异常标识
  5. 返回值
  6. “函数”体,也就是lambda表达式需要进行的实际操作

几种简写的格式:

语法 序号 [ 捕获列表 ] ( 形参数列表 ) mutable(可选) 异常属性 -> 返回值类型 { 函数体 } (1) [ capture-list ] ( params ) -> ret { body } (2) [ capture-list ] ( params ) { body } (3) [ capture-list ] { body } (4)
    (1)为完整的形式,包含变量捕获列表、形参列表、可变属性(可选)和返回值类型等。 (2)省略了mutable,表示Lambda不能修改捕获的变量。 (3)Lambda的返回值类型如果可以由函数体中的实际返回值推导出,可以省略。 (4)如果没有形参,可以省略圆括号。
经验分享 程序员 微信小程序 职场和发展