C++语言之Lambda函数与表达式
C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。
Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:
[capture](parameters)->return-type{body}
例如:
[](int x, int y){ return x < y ; }
如果没有返回值可以表示为:
[capture](parameters){body}
例如:
[]{ ++global_x; }
在一个更为复杂的例子中,返回类型可以被明确的指定如下:
[](int x, int y) -> int { int z = x + y; return z + x; }
本例中,一个临时的参数 z 被创建用来存储中间结果。如同一般的函数,z 的值不会保留到下一次该不具名函数再次被调用时。
如果 lambda 函数没有传回值(例如 void),其返回类型可被完全忽略。
在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:
[] // 沒有定义任何变量。使用未定义变量会引发错误。 [x, &y] // x以传值方式传入(默认),y以引用方式传入。 [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。 [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。 [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。 [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:
[this]() { this->someFunc(); }();
C++语言之Lambda函数与表达式相关推荐
- C++编程语言之Lambda函数与表达式
C++编程语言之Lambda函数与表达式 C++编程语言之Lambda函数与表达式
- C++编程语言之Lambda 函数与表达式
C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式). Lambda 表达式把函数看作对象.Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参 ...
- lambda函数if_lambda表达式速度如何呢?看完这篇文章你就明白了
虽然Java 8已经出了好几年了,但是很多朋友可能对于其中的一些特性还是不太了解.甚至对lambda表达式这个特性可能会产生误解,误认为lambda表达式会影响程序的速度.其中也不乏很多误人子弟的自媒 ...
- Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)
深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...
- python key=lambda函数_使用’key’和lambda表达式的python max函数
我来自OOP背景,尝试学习Python.我使用的是max函数,该函数使用lambda表达式返回Player类型的实例,其中players列表中的totalScore最大. def winner(): ...
- R语言with函数和within函数:with函数基于表达式在dataframe上计算、within函数基于表达式在dataframe上计算并修改原始数据
R语言with函数和within函数:with函数基于表达式在dataframe上计算.within函数基于表达式在dataframe上计算并修改原始数据 目录
- R语言eval函数评估表达式或者字符串实战
R语言eval函数评估表达式或者字符串实战 目录 R语言eval函数评估表达式或者字符串实战 #基本语法 #eval函数评估表达式
- Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略
Python语言学习之lambda:lambda函数的简介.使用方法.案例大全之详细攻略 目录 lambda函数的简介 1.lambda匿名函数的格式 2.lambda函数特点 3.lambda函数与 ...
- 【学习笔记】36、lambda是单表达式函数
lambda是单表达式函数 一.lambda的定义 Python中的lambda关键字可用来快速声明小型匿名函数.lambda函数的行为与使用def关键字声明的常规函数一样,可以用于所有需要函数对象的 ...
最新文章
- MIT | 一种可解释的PPI预测模型
- 一键让二次元老婆微笑,还能把猫脸变成狗脸,这篇CVPR 论文真有趣
- 汇编:OF溢出标志位
- node.js学习笔记
- 爱情麻辣烫:浓缩了中华美食精华与火锅的精髓
- python二进制文件的读取与写入可以分别使用什么方法_用python实现读写文件常见操作方式...
- HDU - 6126 Give out candies
- input鼠标事件(快捷手册)
- 利用python求解度中心性
- mapInfo文件格式详解,其中有“细说Mapinfo索引文件*.ind”
- android 监听飞行模式,如何在Android上检测飞行模式?
- jmeter常见问题总结
- 【OJ每日一练】1039 - 阶乘数列和
- 关于语音会议自动记录的大概设计思路
- Origin:以太坊上的58同城
- 计算机e盘丢失了,电脑E盘突然不见了怎么找回_电脑的E盘突然不见了的解决方法...
- 类与队列的简单实战爬虫
- Unity——写入和读取Json信息的方法
- android 飞机大战背景图片,安卓飞机大战(一) 背景移动
- 扇贝编程python学习笔记-基础篇10
热门文章
- ubuntu 16.0.4 配置 tensorflow-gpu 1.1.0
- $NF和 NF的区别
- Apache+Openssl
- RFID系统集成公司
- NEO改进协议提案2(NEP-2)
- [工具]各种截图工具和录屏软件
- C++设计模式:Template Method
- 中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
- 别再说“我已经努力了”,你的“努力”一文不值!
- iOS故障排除指南:基本技巧