首页 > 后端开发 > C++ > 正文

C++ Lambda 表达式如何传递参数?

王林
发布: 2024-05-25 21:51:08
原创
1261人浏览过

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

C++ Lambda 表达式如何传递参数?

C++ Lambda 表达式:传递参数的详解

Lambda 表达式是一种简化的匿名函数,在 C++ 中广泛用于简洁高效地定义内联函数。为了使 lambda 表达式可以访问外部变量,需要使用捕获列表。传递参数也是如此。

捕获列表传递参数

捕获列表位于 lambda 表达式参数列表之前,由 [] 括起来。它可以捕获局部变量和外部变量。要传递参数,需要在捕获列表中指定参数类型和名称。

// 捕获列表传递 int 参数
auto lambda = [x](int y) { return x + y; };
登录后复制

上面的示例定义了一个 lambda 表达式 lambda,它接收一个名为 yint 型参数,并且可以访问外部局部变量 x

Cowriter
Cowriter

AI 作家,帮助加速和激发你的创意写作

Cowriter 107
查看详情 Cowriter

立即学习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 << &quot;Sum: &quot; << sum << std::endl;
  return 0;
}
登录后复制

在这个例子中,std::accumulate 函数使用提供的 lambda 表达式将数组 numbers 中的元素逐个累加到初始值为 0sum 中。lambda 表达式接收两个整数参数 xy,并返回它们的和。

注意事项

  • 捕获 by value 和 by reference: lambda 表达式可以捕获变量 by value 或 by reference。用 = 表示 by value,用 & 表示 by reference。
  • 注意变量生存期: lambda 表达式只能访问在其生命周期内存在的局部变量。
  • 避免捕获大对象:捕获大对象可能会导致性能问题,因为它们需要额外内存。

以上就是C++ Lambda 表达式如何传递参数?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号