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

C++ Lambda 表达式与匿名函数的区别与联系

WBOY
发布: 2024-09-19 22:27:02
原创
884人浏览过

lambda 表达式和匿名函数都是匿名函数,区别在于:捕获列表:lambda 表达式有捕获列表用于捕获变量,而匿名函数没有。返回类型推导:lambda 表达式需要指定返回类型,而匿名函数使用 auto 关键字推导。可变性:lambda 表达式可以修改捕获的变量,而匿名函数不能。

C++ Lambda 表达式与匿名函数的区别与联系

C++ Lambda 表达式与匿名函数的区别与联系

在 C++ 中,Lambda 表达式和匿名函数可以实现相似的功能,但它们存在一些关键的区别和联系。

Lambda 表达式

立即学习C++免费学习笔记(深入)”;

一个 Lambda 表达式是一个匿名函数,使用 [] 括号表示。它可以捕获其作用域内的局部变量并在需要时使用它们。Lambda 表达式的语法如下:

[capture list](parameters) -> return-type { body }
登录后复制

匿名函数

一个匿名函数也是一个匿名函数,使用 auto 关键字将其返回类型推导出。它不能捕获其作用域内的局部变量。匿名函数的语法如下:

auto [](parameters) -> return-type { body }
登录后复制

区别

  • 捕获列表:Lambda 表达式有一个捕获列表,用于指定要捕获的局部变量,而匿名函数没有。
  • 返回类型推导:Lambda 表达式没有返回类型推导,必须指定其返回类型,而匿名函数使用 auto 关键字自动推导出返回类型。
  • 可变性:Lambda 表达式可以捕获外部变量并修改它们,而匿名函数不能。

联系

  • 匿名性:Lambda 表达式和匿名函数都是匿名函数,这意味着它们没有名称。
  • 函数指针:Lambda 表达式和匿名函数都可以转换为函数指针。
  • 使用场景:Lambda 表达式和匿名函数都可以用于实现回调和内联函数等。

实战案例

假设我们有一个将数字列表转换为字符串列表的函数,如下所示:

vector<string> convert_to_strings(vector<int> numbers) {
  vector<string> strings;
  for (int number : numbers) {
    strings.push_back(to_string(number));
  }
  return strings;
}
登录后复制

我们可以使用 Lambda 表达式简化此函数:

vector<string> convert_to_strings(vector<int> numbers) {
  return vector<string>(numbers.begin(), numbers.end(), [](int number) -> string { return to_string(number); });
}
登录后复制

或者,我们可以使用匿名函数:

vector<string> convert_to_strings(vector<int> numbers) {
  return vector<string>(numbers.begin(), numbers.end(), auto [](int number) { return to_string(number); });
}
登录后复制

在这些示例中,Lambda 表达式和匿名函数都用于将数字转换为字符串,但 Lambda 表达式捕获了局部变量 to_string 而匿名函数没有。

以上就是C++ Lambda 表达式与匿名函数的区别与联系的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

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

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