C++ lambda 用法

  1. 为什么要使用lambda
  2. 就地匿名的定义一个目标函数或者函数对象,不需要额外的再写一个命名函数或者函数对象,以更直接的方式去写函数,可以调高程序的可读性和可维护性。
  3. 简洁:不要额外的的再写一个函数或者函数对象,避免了代码膨胀或者功能分散。
  4. 在需要的时间或者地点实现功能闭包,是程序更加灵活。

  5. lambda 的语法

  6. [capture] (parameters) mutable->return-type{statement};
  7. lambda 的内部实现
  8. 编译器会自动生成一个匿名类,该类重载了 () 运算符。

  9. 当写出上面一块代码时,那么编译器就会将他们转换成以下的代码

  10. 其中,函数名具体是取决于编译器自己编译,私有成员变量是捕获列表所来,重载的 () 操作符函数具体是由 lambda 表达式 body 所来

  11. lambda 的使用

  12. 捕获列表:
  13. [boo]:值捕获 boo 的值
  14. [&, a]:按引用捕获所有局部变量,按值捕获方式捕获 a
  15. [&, a, b, c]:同上
  16. [this]:在成员函数中,直接捕获 this 指针
  17. mutable:
  18. 值捕获后,在匿名函数中对该值是不能做修改的,如果想要做修改,必须加上 mutable 关键字,并且在匿名函数中做的修改结果在函数外是不会生效的;
  19. parameters:
  20. 参数列表也是可以将外部的值传递给匿名函数内部的,和捕获列表的在于,parameter 对应的 operator函数的形参列表。
  21. return-tyep:
  22. 对于编译器能自动推导的返回类型,可以省略 return-type,但是如果无法推导的类型,就必须添加上返回类型
  23. 当函数不止一个return语句时,就需要加上返回类型了。

Example:

Original: https://www.cnblogs.com/wanghao-boke/p/15836627.html
Author: 王清河
Title: C++ lambda 用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535270/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设置c++中cout输出的字体颜色

    一种方法是通过右键控制台进行颜色设置,但是这种方法的问题在于它是全局的,没有具体文字的区分。另外一种方法就是使用代码来修改,本文主要介绍的就是这种方法。 最重要的函数是SetCon…

    C++ 2023年5月29日
    048
  • EclipseC++学习笔记-5 隐藏cmd窗口

    每次启动eclipse后,会有一个cmd窗口,很影响整洁解决办法示例:powershell.exe -WindowStyle Hidden -c wsl — /root…

    C++ 2023年5月29日
    066
  • Android JNI之C/C++层调用JAVA

    从C/C++层调用JAVA层代码步骤: 1. 在JAVA类中创建java方法和本地方法 public class TestNdk{ int a;//本示例中将被修改的JAVA变量 …

    C++ 2023年5月29日
    053
  • vs2019恢复为c++的布局

    工具 -》导入导出设置 -》重置所有设置 -》备份当前设置后下一步 -》 选择一个默认设置集合 Original: https://www.cnblogs.com/bigben01…

    C++ 2023年5月29日
    061
  • c和c++开发工具之clion和vs

    个人体验结果 如果是CMake或者要跨平台的话,建议使用CLion 像我在看书写练习题的话,Clion使用cmake编译c/c++源码更简单上手使用。 如果项目不大,两者都可以。如…

    C++ 2023年5月29日
    0120
  • C++接口设计和代码重构

    讲了接口设计, 文档(doxygen),测试等方面。对于从头编写基础库, 或者没有基础库开发经验并且需要短期内上手, 有一定实际参考价值。 所谓Mikado Method方法是用来…

    C++ 2023年5月29日
    052
  • C#与C/C++的交互

    C#与C/C++的交互 最近在编写Warensoft3D游戏引擎,并预计明年年初发布测试版本,底层引擎使用DirectX和MONO来编写,上层的逻辑使用C#来编写,因此编写了大量C…

    C++ 2023年5月29日
    059
  • 使用VS2015进行C++开发的6个主要原因

    使用VS2015进行C++开发的6个主要原因 使用Visual Studio 2015进行C++开发 在今天的 Build 大会上,进行了”将你的 C++ 代码转移至 …

    C++ 2023年5月29日
    066
  • EclipseC++学习笔记-4 使用win11 wslg 启动应用

    wslg在win10下无法安装,升级win11后才可以基本按网上方法都能安装成功,但需要注意两点1、wsl –update2、如果启动程序不报错,但是不显示窗口的话 e…

    C++ 2023年5月29日
    041
  • vscode c++ 编译生成后,调试时无法命中断点

    1 //test.cpp 2 #include 3 int g_var = 0; 4 void print_line(char *str) 5 { 6 if (str != NUL…

    C++ 2023年5月29日
    065
  • C++引用 学习心得

    参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。 对于像 char、bool、int、float 等基本类型的数据…

    C++ 2023年5月29日
    067
  • TechEmpower 21轮Web框架 性能评测 — C# 的性能 和 Rust、C++并驾齐驱

    自从2021年2月第20轮公布的测试以后,一年半后 的2022年7月19日 发布了 TechEmpower 21轮测试报告:Round 21 results – Tec…

    C++ 2023年5月29日
    060
  • C++11 并发指南后续更新

    C++11 并发指南的第一篇是 2013 年 8 月 3 号写的,到今天(2013 年 8 月 31 号)差不多一个月了,前前后后共写了 8 篇博客介绍 C++11 的并发编程,但…

    C++ 2023年5月29日
    076
  • Using WebAssembly threads from C, C++ and Rust

    Learn how to bring multithreaded applications written in other languages to WebAssembly. J…

    C++ 2023年5月29日
    068
  • Android JNI c/c++调用java 无需新建虚拟机

    近期通过研究SDL源码 得出android JNI c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass void Java_c…

    C++ 2023年5月29日
    044
  • std::get<C++11多线程库~线程间共享数据>(10):使用互斥量保护共享数据(4)

    1 #ifndef DEADLOCK_QUESTIONDESCRIBLE_AND_SOLUTION_H 2 #define DEADLOCK_QUESTIONDESCRIBLE_A…

    C++ 2023年5月29日
    054
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球