C++ [](){} 与 C++11 lambda表达式
C++11中引入了lambda表达式。
语法格式:
这里假设我们定义了一个如上图的lambda表达式。现在来介绍途中标有编号的各个部分是什么意思。
- Lambda表达式的引入标志,在‘[]’里面可以填入‘=’或‘&’表示该lambda表达式“捕获”(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,‘&’表示一引用的方式;‘=’表明以值传递的方式捕获,除非专门指出。
- Lambda表达式的参数列表
- Mutable 标识
- 异常标识
- 返回值
- “函数”体,也就是lambda表达式需要进行的实际操作
几种简写的格式:
-
(1)为完整的形式,包含变量捕获列表、形参列表、可变属性(可选)和返回值类型等。 (2)省略了mutable,表示Lambda不能修改捕获的变量。 (3)Lambda的返回值类型如果可以由函数体中的实际返回值推导出,可以省略。 (4)如果没有形参,可以省略圆括号。