lambda表达式浅析【C++学习笔记】
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++学习笔记】相关推荐
- 反射、Lambda表达式(Java学习笔记十二)
文章目录 反射 Class 类 创建运行时类的对象 获取运行时类的完整结构 调用运行时类的指定结构 调用指定方法 调用指定属性 关于setAccessible方法的使用: 动态代理 Lambda表达式 ...
- 《C Primer Plus(第6版)中文版》 第5章 运算符、表达式和语句 学习笔记
对标题和序号稍加修改. 5.1 循环简介 本章仍从一个程序开始. #include<stdio.h> int main(void) {int val=1;while(val<11){ ...
- 2022年Java学习笔记目录
一.2022年Java任务驱动课程 任务驱动,统摄知识点:2022年Java程序设计讲课笔记 二.2022年Java学习笔记 (一)踏上Java开发之旅 Java学习笔记1.1.1 搭建Java开发环 ...
- lambda表达式 拉姆达
lambda表达式 拉姆达 学习这个之前,需要明确 有一种接口叫做函数式接口,只允许接口里面只有一个函数 可以使用 @FunctionalInterface进行注解 如果这个接口里面定义了两个方法,就 ...
- java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用
本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记.如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了. 1. 课程介绍 2. 为什么引入Lamb ...
- [研究笔记]Lambda表达式学习笔记
最近正好用到,就稍微做一下学习笔记.全部经过自己理解的归纳总结,坚持更新. Lambda表达式强大到和图灵机等价,而且极其简洁.优美,太好玩了! ==== Formal Defination Lamb ...
- Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是'=>'. 杜甫说:射 ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
最新文章
- Spring servlet
- python 时间字符串
- EXCEL数字前补零且转换成文本型
- ubuntu20.10创建QT应用程序快捷方式 Terminal中输入命令直接打开QtCreator
- python类属性的应用 子类继承可以节约空间
- apt mysql 5.1_linux下apt安装mysql导致mysql.user table is damaged
- c# json 汉字乱码_json.net中文乱码问题
- 厉害了,Netty 轻松实现文件上传!
- Java中必须了解的常用类
- SEO小白学习与实践(一):seo学习缘起、目标
- 美团架构师谈论程序员进阶架构师所需能力模型
- 进程与线程的一个简单解释---阮一峰的网络日志
- win7 matlab 7.0,win7环境下使用matlab7.0的方法
- org.apache.kafka.clients.consumer.OffsetOutOfRangeException: Offsets out of range with no configured
- 龙果支付 mysql_开源版龙果支付系统-国内首款开源的互联网支付系统
- 编程基础 - 线索二叉树 (Threaded Binary Tree)
- 【风控系列】3. 高效的风控业务流程
- 手机黑名单,拦截电话和短信,清除通话记录
- 牛客——[SDOI2013]随机数生成器(推公式+BSGS)
- [OpenAirInterface实战-4] :OAI支持的4G LTE功能集
热门文章
- 计算机网络英文面试题,计算机网络面试题整理
- android格式化时间中文版,Android 仿微信聊天时间格式化显示功能
- WordPress插入图片无法居中的解决方法
- datatable 如何修改 某行 某列 的 字体颜色
- Linux C 数据结构---单向链表
- [vue] 父子组件间传值
- /bin/tar: 从成员名中删除开头的“/”
- Ubuntu12中samba环境搭建与使用
- wpa_supplicant无线网络配置
- VC++6.0开发环境之快捷键