<p>lambda表达式是C++中定义匿名函数的简洁方式,可捕获外部变量并用于算法、回调等场景。基本语法为捕获列表->返回类型{函数体},返回类型常可省略。例如auto add = [](int a, int b){ return a + b; };可直接调用add(3,4)得7。常用于std::sort自定义排序:std::sort(vec.begin(), vec.end(), [](int x, int y){ return x > y; });捕获列表支持[=]值捕获、[&]引用捕获、[x]单变量值捕获、[&x]单变量引用捕获、[this]捕获当前对象指针。如int factor = 2; auto multiply = [factor](int x){ return x * factor; };此时factor被值复制,后续修改不影响lambda内值。若需在lambda中修改值捕获变量,需加mutable关键字:auto func = [factor]() mutable { factor++; };此操作仅修改副本,不影响外部变量。引用捕获需注意生命周期,避免lambda使用时变量已销毁,导致未定义行为。常见应用包括std::for_each遍历处理:std::vector<int> nums = {1,2,3,4,5}; int threshold = 3; std::for_each(nums.begin(), nums.end(), [threshold](int</p>

在C++中,lambda表达式是一种定义匿名函数的简洁方式,常用于需要传递函数作为参数的场景,比如算法中的比较、过滤或回调。它支持捕获外部变量,让代码更灵活高效。
lambda表达式的语法结构如下:
[捕获列表](参数列表) -> 返回类型 { 函数体 }其中返回类型可省略,编译器会自动推导。例如,定义一个简单加法lambda:
auto add = [](int a, int b) { return a + b; };
立即学习“C++免费学习笔记(深入)”;
可以直接调用:add(3, 4); 结果为7。这种写法在STL算法中特别有用,比如用在std::sort中自定义排序规则:
std::sort(vec.begin(), vec.end(), [](int x, int y) { return x > y; });
lambda可以访问其定义作用域内的局部变量,这通过“捕获列表”实现。常见的捕获方式有:
例如:
int factor = 2;
auto multiply = [factor](int x) { return x * factor; };
// 此时factor被值捕获,后续修改factor不影响lambda内部
如果使用值捕获,lambda内部默认不能修改捕获的变量。若需修改,需加上mutable关键字:
auto func = [factor]() mutable { factor++; };
这会修改lambda内副本的值,不影响外部原变量。
使用引用捕获时要特别注意变量生命周期。如果lambda执行时,被捕获的引用变量已销毁,会导致未定义行为。比如返回一个引用捕获局部变量的lambda,就非常危险。
lambda常用于事件回调、异步任务和容器操作。例如,在遍历容器并对满足条件的元素处理时:
std::vector
int threshold = 3;
std::for_each(nums.begin(), nums.end(), [threshold](int n) {
if (n > threshold) std::cout
});
这样代码紧凑且逻辑清晰,threshold通过值捕获安全使用。
基本上就这些。掌握lambda表达式能显著提升C++代码的表达力和效率,尤其是在结合STL和现代C++特性时。关键是理解捕获机制和生命周期管理,避免常见陷阱。
以上就是C++如何使用lambda表达式_C++匿名函数与捕获变量的使用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号