Lambda表达式是C++11引入的匿名函数机制,核心语法为[捕获列表](参数) mutable -> 返回类型 {函数体},其中捕获列表和函数体必选,其余可省;支持值捕获[=]、引用捕获[&]及混合模式,如[int x](int y){return x+y;};常用于STL算法配合实现函数式编程,如std::sort、std::transform和std::accumulate等,提升代码简洁性与可读性。

在C++中,Lambda表达式是一种定义匿名函数的简洁方式,它允许你在需要函数对象的地方直接内联编写逻辑,而无需提前声明函数或函数对象。从C++11开始引入后,Lambda已成为现代C++编程中实现函数式风格的重要工具。
一个Lambda表达式的完整形式如下:
[捕获列表](参数列表) mutable -> 返回类型 { 函数体 }其中,只有捕获列表和函数体是必需的,其余部分可省略。编译器通常能自动推导返回类型。
示例:定义并立即调用一个简单Lambda
立即学习“C++免费学习笔记(深入)”;
[]() { std::cout << "Hello from lambda!\n"; }();常见使用场景是配合STL算法:
std::vector<int> nums = {5, 2, 8, 1};
std::sort(nums.begin(), nums.end(), [](int a, int b) {
return a > b; // 降序排序
});
Lambda通过捕获列表访问外部作用域的变量,支持值捕获、引用捕获和混合模式。
例如:
int factor = 3;
auto multiply = [factor](int x) { return x * factor; };
std::cout << multiply(5); // 输出15
注意:按值捕获后默认无法修改,如需修改应加上mutable关键字。
Lambda常用于算法中的比较、过滤等操作。
std::vector<std::string> words = {"cpp", "lambda", "functional"};
auto long_words = std::count_if(words.begin(), words.end(),
[](const std::string& s) { return s.length() > 4; });
若要将Lambda作为返回值,建议使用std::function包装:
#include <functional>
<p>std::function<int(int)> make_adder(int n) {
return [n](int x) { return x + n; };
}</p><p>auto add5 = make_adder(5);
std::cout << add5(3); // 输出8
结合Lambda与STL算法可写出更清晰的函数式代码。
示例:计算偶数平方和
std::vector<int> data = {1, 2, 3, 4, 5, 6};
int sum = std::accumulate(data.begin(), data.end(), 0,
[](int acc, int x) {
return x % 2 == 0 ? acc + x*x : acc;
});
基本上就这些。Lambda让C++也能写出接近函数式语言的表达力,关键是理解捕获机制和类型推导规则。合理使用能让代码更紧凑、意图更明确。不复杂但容易忽略细节,比如生命周期和可变性控制。
以上就是c++++怎么使用lambda表达式_c++匿名函数与函数式编程实践的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号