Lambda表达式是C++11引入的匿名函数特性,语法为[捕获列表](参数)->返回类型{函数体},常用简化形式;可捕获外部变量,用于STL算法等场景。

Lambda表达式是C++11引入的重要特性,它允许你在代码中定义匿名函数,特别适合用在需要传递函数作为参数的场合,比如STL算法。它的语法简洁,能捕获外部变量,使用起来非常灵活。
lambda表达式的基本写法
lambda表达式的完整语法如下:
[捕获列表](参数列表) mutable 异常属性 -> 返回类型 { 函数体 }
其中,最常用的是简化形式:
[捕获列表](参数) { 函数体 }
说明各部分含义:
立即学习“C++免费学习笔记(深入)”;
捕获列表:决定如何访问外部作用域中的变量,如 [=] 值捕获、[&] 引用捕获、[x] 捕获特定变量等 参数列表:和普通函数参数类似,可为空 函数体:实现具体逻辑 返回类型通常可省略,编译器会自动推导
示例:
int x = 10;
auto f = [x](int n) { return n + x; };
cout
捕获方式详解
lambda能否访问外部变量取决于捕获列表:
[=]:以值的方式捕获所有外部变量 [&]:以引用方式捕获所有外部变量 [x]:仅值捕获变量x [&x]:仅引用捕获变量x [this]:捕获当前对象的this指针(在类成员函数中常用) [=, &x]:值捕获所有,但引用捕获x
注意:值捕获的变量在lambda创建时就固定了,后续外部修改不影响lambda内部;引用捕获则会反映外部变化。
int a = 1, b = 2;
auto f1 = [a,&b]() { cout a = 10; b = 20;
f1(); // 输出 1,20 —— a是值捕获,b是引用捕获
常见使用场景
lambda最常用于STL算法中替代函数对象或函数指针:
排序自定义规则 查找满足条件的元素 遍历并处理容器元素
示例:对vector按绝对值排序
vector v = {-3, 1, -2, 5};
sort(v.begin(), v.end(), [](int a, int b) {
return abs(a) });
示例:遍历输出
for_each(v.begin(), v.end(), [](int x) {
cout });
存储和传递lambda
由于每个lambda表达式生成唯一的匿名类型,不能直接用普通函数指针接收。推荐使用std::function:
#include
using namespace std;
function comp = [](int a, int b) {
return a > b;
};
sort(v.begin(), v.end(), comp);
也可以用auto保存,但只能在局部作用域使用:
auto myLambda = []() { cout myLambda();
基本上就这些。lambda让C++代码更简洁、直观,尤其配合算法使用时大幅提升可读性。掌握捕获机制和基本语法后,就能在日常开发中高效使用。不复杂但容易忽略细节,多写几次就熟练了。
以上就是c++++ lambda表达式的写法和用法_c++ lambda表达式教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478887.html
微信扫一扫
支付宝扫一扫