通过捕获列表传递参数,lambda 表达式可以访问外部变量。以 int 型参数为例,捕获列表为 [x](int y),其中 x 为外部变量,y 为 lambda 表达式参数。利用此技巧,lambda 表达式可用于各种场景,例如数组求和,其中 std::accumulate 函数将数组元素累加到初始值为 0 的变量中,该变量通过 lambda 表达式逐个累加。

C++ Lambda 表达式:传递参数的详解
Lambda 表达式是一种简化的匿名函数,在 C++ 中广泛用于简洁高效地定义内联函数。为了使 lambda 表达式可以访问外部变量,需要使用捕获列表。传递参数也是如此。
捕获列表传递参数
捕获列表位于 lambda 表达式参数列表之前,由 [ 和 ] 括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。
// 捕获列表传递 int 参数auto lambda = [x](int y) { return x + y; };
上面的示例定义了一个 lambda 表达式 lambda,它接收一个名为 y 的 int 型参数,并且可以访问外部局部变量 x。
立即学习“C++免费学习笔记(深入)”;
实战案例:使用 lambda 表达式求和
考虑一个需要将数组中的所有元素求和的场景。可以使用带有捕获列表传递参数的 lambda 表达式来简化此操作:
#include <vector>#include <algorithm>int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; int sum = std::accumulate(numbers.begin(), numbers.end(), 0, [](int x, int y) { return x + y; }); std::cout << "Sum: " << sum << std::endl; return 0;}
在这个例子中,std::accumulate 函数使用提供的 lambda 表达式将数组 numbers 中的元素逐个累加到初始值为 0 的 sum 中。lambda 表达式接收两个整数参数 x 和 y,并返回它们的和。
注意事项
捕获 by value 和 by reference: lambda 表达式可以捕获变量 by value 或 by reference。用 = 表示 by value,用 & 表示 by reference。注意变量生存期: lambda 表达式只能访问在其生命周期内存在的局部变量。避免捕获大对象:捕获大对象可能会导致性能问题,因为它们需要额外内存。
以上就是C++ Lambda 表达式如何传递参数?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1452278.html
微信扫一扫
支付宝扫一扫