lambda表达式浅析【C++学习笔记】

基本用法:

auto f = [/*捕获列表*/](/*参数*/)->int /*后置返回值类型*/{/** 函数体*/};

捕获列表:

  • [] : 不捕获任何变量

  • [变量名] : 表示值捕获,不可修改

  • [=] :按值捕获所有变量,不可修改

  • [&] : 按引用捕获可以修改

  • [this] : 在类中捕获,捕获当前类的this指针,如果使用 = & 捕获,则默认捕获this指针

  • [& 变量名] :按引用捕获该变量

  • [ = , & 变量名] ; 按值捕获所有变量,但是按引用捕获变量名变量,按引用捕获的变量,每个前面都有写一个&

  • [ &,变量名] : 按引用捕获所有变量,但是按值捕获变量名变量

lambda表达式延迟调用易错点

int a = 12;auto f = [=]() ->int {return a;};a = 99;cout << f() << endl;

输出:

为什么输出不是99呢?

因为在遇到auto f = [=]() ->int这一行时,a的值就已经被复制到lambda表达式中了

要避免这个错误可以使用按引用捕获

lambda表达式类型

lambda表达式是闭包类型,可以理解成函数中的函数

编译器会为每个lambda表达式生成一个类,和一个可调用类对象

lambda表达式用法介绍

vector<int> vec{ 12,23,435,56,76 };int isnums = 9;for_each(vec.begin(), vec.end(), [=](int& val){val -= isnums;});for (auto value : vec){cout << value << endl;}

广义lambda捕获

解决lambda捕获依赖于类对象问题

将m_object复制到闭包里面来

[ temp = m_object]()
{return temp;};

lambda表达式浅析【C++学习笔记】相关推荐

  1. 反射、Lambda表达式(Java学习笔记十二)

    文章目录 反射 Class 类 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 调用指定方法 调用指定属性 关于setAccessible方法的使用: 动态代理 Lambda表达式 ...

  2. 《C Primer Plus(第6版)中文版》 第5章 运算符、表达式和语句 学习笔记

    对标题和序号稍加修改. 5.1 循环简介 本章仍从一个程序开始. #include<stdio.h> int main(void) {int val=1;while(val<11){ ...

  3. 2022年Java学习笔记目录

    一.2022年Java任务驱动课程 任务驱动,统摄知识点:2022年Java程序设计讲课笔记 二.2022年Java学习笔记 (一)踏上Java开发之旅 Java学习笔记1.1.1 搭建Java开发环 ...

  4. lambda表达式 拉姆达

    lambda表达式 拉姆达 学习这个之前,需要明确 有一种接口叫做函数式接口,只允许接口里面只有一个函数 可以使用 @FunctionalInterface进行注解 如果这个接口里面定义了两个方法,就 ...

  5. java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

    本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...

  6. [研究笔记]Lambda表达式学习笔记

    最近正好用到,就稍微做一下学习笔记.全部经过自己理解的归纳总结,坚持更新. Lambda表达式强大到和图灵机等价,而且极其简洁.优美,太好玩了! ==== Formal Defination Lamb ...

  7. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  8. java lambda表达式学习笔记

    lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是'=>'. 杜甫说:射 ...

  9. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

最新文章

  1. Spring servlet
  2. python 时间字符串
  3. EXCEL数字前补零且转换成文本型
  4. ubuntu20.10创建QT应用程序快捷方式 Terminal中输入命令直接打开QtCreator
  5. python类属性的应用 子类继承可以节约空间
  6. apt mysql 5.1_linux下apt安装mysql导致mysql.user table is damaged
  7. c# json 汉字乱码_json.net中文乱码问题
  8. 厉害了,Netty 轻松实现文件上传!
  9. Java中必须了解的常用类
  10. SEO小白学习与实践(一):seo学习缘起、目标
  11. 美团架构师谈论程序员进阶架构师所需能力模型
  12. 进程与线程的一个简单解释---阮一峰的网络日志
  13. win7 matlab 7.0,win7环境下使用matlab7.0的方法
  14. org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets out of range with no configured
  15. 龙果支付 mysql_开源版龙果支付系统-国内首款开源的互联网支付系统
  16. 编程基础 - 线索二叉树 (Threaded Binary Tree)
  17. 【风控系列】3. 高效的风控业务流程
  18. 手机黑名单,拦截电话和短信,清除通话记录
  19. 牛客——[SDOI2013]随机数生成器(推公式+BSGS)
  20. [OpenAirInterface实战-4] :OAI支持的4G LTE功能集

热门文章

  1. 计算机网络英文面试题,计算机网络面试题整理
  2. android格式化时间中文版,Android 仿微信聊天时间格式化显示功能
  3. WordPress插入图片无法居中的解决方法
  4. datatable 如何修改 某行 某列 的 字体颜色
  5. Linux C 数据结构---单向链表
  6. [vue] 父子组件间传值
  7. /bin/tar: 从成员名中删除开头的“/”
  8. Ubuntu12中samba环境搭建与使用
  9. wpa_supplicant无线网络配置
  10. VC++6.0开发环境之快捷键