1.参考如下文章,讲的挺好的
深入浅出 C++ Lambda表达式:语法、特点和应用 (请注意:此链接是本章节的原文)
2. 什么是 Lambda表达式(截取以上参考文章)
Lambda表达式是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象(闭包)的简便方法。Lambda表达式的基本语法如下:
[capture list] (parameter list) -> return type { function body }
其中:
-
capture list 是捕获列表,用于指定 Lambda表达式可以访问的外部变量,以及是按值还是按引用的方式访问。捕获列表可以为空,表示不访问任何外部变量,也可以使用默认捕获模式 & 或 = 来表示按引用或按值捕获所有外部变量,还可以混合使用具体的变量名和默认捕获模式来指定不同的捕获方式。
-
parameter list 是参数列表,用于表示 Lambda表达式的参数,可以为空,表示没有参数,也可以和普通函数一样指定参数的类型和名称,还可以在 c++14 中使用 auto 关键字来实现泛型参数。
-
return type 是返回值类型,用于指定 Lambda表达式的返回值类型,可以省略,表示由编译器根据函数体推导,也可以使用 -> 符号显式指定,还可以在 c++14 中使用 auto 关键字来实现泛型返回值。
-
function body 是函数体,用于表示 Lambda表达式的具体逻辑,可以是一条语句,也可以是多条语句,还可以在 c++14 中使用 constexpr 来实现编译期计算。图解Lamda使用场景
3.图解Lamda使用场景
- Lamda的调用往往放在其他模块或者前期设计的预定函数的参数的位置,作为callback函数使用。
- 请注意,Lamda是一个临时函数对象,与普通回调函数不同的是,[ ]可以传入预定函数上文的变量。
如上图所示:
- Lamda的函数体的内容,只是预定函数在合适时机调用的一段逻辑,且这段逻辑中使用的一部分数据可能只有Lamda编写时才知道的。
- Lamda的参数也是在预定函数在合适时机调用时赋予的。