什么是Lambda表达式,为什么要用Lambda表达式,你在哪里使用过
面试时被问到,没答好,整理记录一下
分为三个层次:
1、什么是 Lambda?
回答思路:概念 + 语法构成
“Lambda 表达式是 C++11 引入的一个匿名函数对象(也叫仿函数)。它允许我们在需要函数的地方(比如作为参数传递给算法或异步回调)就地定义逻辑。
它的核心结构包括四个部分:
- 捕获列表 []:决定如何访问外部变量(按值或按引用)。
- 参数列表 ():和普通函数一样。
- 返回类型 ->:通常可以自动推导。
- 函数体 {}:具体的逻辑实现。”
2、为什么要用 Lambda?
通常从以下三个维度回答:
- 代码内聚性与可读性(Locality)
回答: “在没有 Lambda 之前,如果我要给 std::sort 写一个自定义比较规则,我必须在类外面定义一个全局函数或者一个仿函数类。这会导致逻辑碎片化。使用 Lambda 可以让逻辑就地编写,代码读起来更直观,维护者不需要跳到别的文件去看这个回调是怎么实现的。” - 闭包特性(Capture State)
回答: “Lambda 最强大的地方在于捕获列表。它能轻松捕获当前作用域内的局部变量。如果用普通函数,我可能需要定义一个复杂的结构体或者传递大量的参数;而 Lambda 自动生成的闭包类帮我处理了这些状态,非常适合异步编程和事件驱动的场景。” - 编译器优化(Performance)
回答: “相比于传统的函数指针,Lambda 更有利于编译器进行内联(Inline)优化。因为 Lambda 在底层是一个唯一的类类型,编译器在编译期就能确定调用目标,而函数指针往往需要在运行时进行间接寻址。”
