Lambda 表达式(C++11)
- Lambda 表达式基本语法
[capture](parameters) -> return_type {
function_body
}
capture: 捕获列表,指定lambda表达式如何获取外部变量。[] 捕获列表为空表示不捕获外部变量
parameters: 参数列表,定义lambda表达式中内部的参数。
return_type: 返回类型,可以从函数体自动推导,可以省略。
function_body: lambda表达式内部逻辑
capture: 捕获列表 (用于指定lambda表达式如何访问其作用域外的变量)
- 按值捕获:(捕获在lambda表达式定义的时候完成,调用lambda表达式才会执行其中的代码)
- [=] (捕获所有外部变量副本)
- [var1, var2] (捕获指定外部变量部分)
- 按引用捕获:
- [&] (捕获所有外部变量引用)
- [var1, var2] (捕获指定外部变量引用)
- 混合捕获
#include <iostream> using namespace std; int main() { int x = 10, y = 20; auto lambda = [=, &y]() { // 按值捕获x,按引用捕获y cout << "x in lambda: " << x << endl; // 输出 10 cout << "y in lambda: " << y << endl; // 输出 20 y = 30; // 修改外部变量y }; x = 15; y = 25; lambda(); // 输出 x = 10, y = 25 cout << "y after lambda: " << y << endl; // 输出 30 return 0; }
- 返回类型:lambda 表达式可以显式指定返回类型,也可以由编译器自动推导。如果函数体只有一个返回语句,编译器可以自动推导返回类型。
auto lambda = [] () -> int { return 42; }; auto lambda_auto = [] () { return 42; };
TIPS: std::function 是一个通用的函数包装器,可以保存、复制、调用任何可调用的目标(如普通函数、函数对象,指向成员函数的指针)
function<int(int, int)> func = add; 第一个int是返回值; (int, int) 表示参数列表 function<int(int, int)> lambda = [](int a, int b) -> int { return a + b; } 一般直接用 auto 替换
- 按值捕获:(捕获在lambda表达式定义的时候完成,调用lambda表达式才会执行其中的代码)