当前位置: 首页 > news >正文

C++11新特性之lambda表达式

1.介绍

        C++11引入了lambda表达式。lambda表达式提供一种简洁的方式来定义匿名函数对象,使得在需要临时定义一个函数时非常方便。

2.lambda表达式用法

        lambda表达式的基本用法为:  

[捕获列表](参数列表)->返回类型

        函数体 

};

捕获列表:指定lambda表达式可以访问那些外部变量,以及以哪种方式访问。下面列举常用的几种格式。

        (1)[  ]——空括号表示不导入任何外部变量。

        (2)[ = ]—— 以值传递的方式导入所有外部变量。(常用)

        (3)[ & ]——以引用传递的方式导入所有外部变量。(常用)

        (4)[val1, val2...]——以值传递的方式导入val1,val2等指定变量。

        (5)[&val1, &val2...]——以引用传递的方式导入val1,val2等指定变量。

        (6)[val1, &val2...]——以值传递的方式导入val1,引用传递的方式导入val2。(两种方式可以混合使用)

        (7)[ this ]——以值传递的方式导入当前的this指针。

        在一般使用中可以直接使用(2)与(3),简单并且不容易出错。

参数列表:传递给lambda表达式的参数。

返回类型:显式指定lambda表达式的返回类型。(这部分可以省略不写)。

函数体:lambda表达式执行的代码。

例一:

#include <iostream>int main() {auto add = [](int a, int b){return a + b;};int result = add(10, 20);std::cout << "Result: " << result << std::endl;return 0;
}

例二:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{int num[4] = {4, 2, 3, 1};//对 a 数组中的元素进行排序sort(num, num+4, [=](int x, int y) -> bool{ return x < y; } );for(int n : num){cout << n << " ";}return 0;
}

3.总结

优点:

        lambda表达式使C++编程更加灵活,尤其在处理临时函数与回调函数时非常方便。

注意事项:

        (1)生命周期:确保lambda引用的变量是有效的,否则可能导致未定义错误。

        (2)性能问题:值传递会复制外部变量的值,产生额外的性能开销。如果不需要修改外部的值,建议使用引用传递。

http://www.lryc.cn/news/529864.html

相关文章:

  • 洛谷 P10289 [GESP样题 八级] 小杨的旅游 C++ 完整题解
  • 使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践
  • JWT入门
  • Python - Quantstats量化投资策略绩效统计包 - 详解
  • 智慧园区管理系统推动企业智能运维与资源优化的全新路径分析
  • 【数据结构-字典树】力扣14. 最长公共前缀
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(31):HTTPS和TLS/SSL
  • Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
  • L30.【LeetCode笔记】设计链表
  • java日志框架详解-Log4j2
  • C++中vector追加vector
  • 加一(66)
  • 远程连接-简化登录
  • canvas的基本用法
  • Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)
  • 鸿蒙开发黑科技“stack叠层”替代customdialog
  • FreeRTOS从入门到精通 第十五章(事件标志组)
  • 智慧园区管理平台实现智能整合提升企业运营模式与管理效率
  • markdown公式特殊字符
  • 【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会
  • 学习数据结构(5)单向链表的实现
  • 刷题记录 HOT100回溯算法-5:22. 括号生成
  • Keepalived高可用集群企业应用实例二
  • C++计算特定随机操作后序列元素乘积的期望
  • c++字母大小写转换
  • MySQL知识点总结(十六)
  • Windows程序设计10:文件指针及目录的创建与删除
  • geolocator包的功能和用法
  • Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
  • 22.Word:小张-经费联审核结算单❗【16】