C++ 之lambda表达式
C++ 之lambda表达式
[capture](parameters) option -> return-type { body }
capture:捕获列表,可选 捕捉列表总是出现在 lambda 表达式的开始。实际上,是 lambda 引出符,编译器根据该引出符判断接下来的代码是否是 lambda 表达式。 捕捉列表能够捕获上下文中的变量,以在 lambda 表达式内使用,主要有如下几种情况:
# 不捕获任何变量
[]
# 按引用捕获外部作用域中所有变量,在 lambda 表达式内使用
[&]
# 按值捕获外部作用域中所有变量,在 lambda 表达式内使用
# 按值捕获的变量,在 lambda 表达式内是只读的,不能修改赋值
[=]
# 捕获外部作用域中所有变量,其中foo变量按引用捕获,其他的按值捕获
[=, &foo]
# 按值捕获bar变量,同时不捕获其他变量
[bar]
# 捕获当前类中的 this 指针
# 捕获了 this 就可以在 lambda 中使用当前类的成员变量和成员函数。
# 如果已经使用了 & 或者 =,就默认添加此选项。
[this]
parameters:参数列表,可选
option:函数选项,可选
return-type:返回值类型,可选。没有返回值的时候也可以连同符号一起省略
body:函数体
// 匿名函数的定义 []() { cout << "匿名函数" << endl; }; // 匿名函数的调用 []() { cout << "匿名函数的调用" << endl; }(); int a = 10; //[]() { // 不捕获任何变量 // cout << a; //}(); // 按引用捕获 [&]() { cout << a++ << endl; }(); cout << a << endl; // 按值捕获(只读, 不能修改) //[=]() { // cout << a++ << endl; //报错 //}(); //cout << a << endl; // 按值捕获 (可修改,但属于按值传递, 不影响外部变量的值) [=]() mutable { cout << a++<<endl; // 10 }(); cout << a << endl;; // 有参的匿名函数 [](int x, int y) { cout << x << "+" << y << "=" << x + y << endl; }(1,2); // 匿名函数的返回值 // 返回值可以省略 编译器会自动推断返回值的类型 int sum = [](int x, int y) -> int{ return x + y; }(1,2); cout << sum << endl; int sum1 = [](int x, int y) { return x + y; }(3, 2); cout << sum1 << endl;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?