c++11 lambda
- [] 不截取任何变量
- [&} 截取外部作用域中所有变量,并作为引用在函数体中使用
- [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用
- [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
- [bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
- [x, &y] x按值传递,y按引用传递
- [this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
C++11 的 lambda 表达式规范如下:
[ capture ] ( params ) mutable exception attribute -> ret { body }
|
(1) | |
[ capture ] ( params ) -> ret { body }
|
(2) | |
[ capture ] ( params ) { body }
|
(3) | |
[ capture ] { body }
|
(4) |
其中
- (1) 是完整的 lambda 表达式形式,
- (2) const 类型的 lambda 表达式,该类型的表达式不能改捕获("capture")列表中的值。
- (3)省略了返回值类型的 lambda 表达式,但是该 lambda 表达式的返回类型可以按照下列规则推演出来:
- 如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。
- 如果没有 return 语句,则类似 void f(...) 函数。
- 省略了参数列表,类似于无参函数 f()。
mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。
exception 说明 lambda 表达式是否抛出异常(noexcept
),以及抛出何种异常,类似于void f() throw(X, Y)。
attribute 用来声明属性。
另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:
[a,&b]
a变量以值的方式呗捕获,b以引用的方式被捕获。[this]
以值的方式捕获 this 指针。[&]
以引用的方式捕获所有的外部自动变量。[=]
以值的方式捕获所有的外部自动变量。[]
不捕获外部的任何变量。
此外,params 指定 lambda 表达式的参数。
转载于:https://www.cnblogs.com/diegodu/p/6142245.html
c++11 lambda相关推荐
- C++11:Lambda表达式(匿名函数)理解
C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象.即你可以理解为(Lambda 表达式实际上是一个函数,只是它没 ...
- C++11 Lambda表达式(匿名函数)详解
使用 STL 时,往往会大量用到函数对象,为此要编写很多函数对象类.有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费. 而且,定义函数对象类的地方和使用函 ...
- C++11 lambda表达式、function类模板、bind函数适配器
文章目录 lambda表达式 lambda表达式的语法 lambda表达式的原理 function模板 function与重载函数 bind函数适配器 lambda表达式 当我们在写代码的时候如果经常 ...
- C++11 Lambda函数(匿名函数)
C++11引入了lambda表达式,使得程序员可以定义匿名函数,该函数是一次性执行的,既方便了编程,又能防止别人的访问. Lambda表达式的语法通过下图来介绍: Lambda表达式的引入标志,在'[ ...
- [C++11]lambda表达式语法
代码如下: #include <iostream> using namespace std;void func(int x, int y) {int a;int b;[=]() {int ...
- C++11 Lambda表达汇总总结
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或ex ...
- C++11 Lambda表达式
1.简介 1.1定义 C++11新增了很多特性,Lambda表达式(Lambda expression)就是其中之一,很多语言都提供了 Lambda 表达式,如 Python,Java ,C#等.本质 ...
- C++ 11 Lambda表达式
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或ex ...
- C++11::lambda 的用法
lambda 是个不具名的 function object(或称做 functor),lambda 改变了 C++ 标准库的用法. Lambda 的语法 最小型的 lambda 函数没有参数,如下: ...
最新文章
- IT工程师实战英语之一
- C++ Const指针学习
- HDR视频生态圈追踪
- 4.02Day12函数 装饰器
- MacOS中运行第一个PySide6实例
- autograd手动仿真手记
- 基于深度学习的大豆病虫害自动计数(SLIC超像素方法进行图像分割)
- Windows10原神二次元美化主题工具包分享
- LateX各种命令符号
- go开发报 A required privilege is not held by the client 错误
- c语言1GB转成B,2018职称计算机考试WPS_Office精选习题9
- Vue实现省、市、县三级联动
- thzvv.com forum php,为什么Naver账号不能用了?
- 简单的购物车和购物车结算
- Doc和Docx有什么区别
- html空间进入动画界面,HTML5 / CSS3 Transform / Animation 示例页面
- 随机画五角星,空心五角星
- 求两圆相交面积(模板)
- 研发绩效管理和绩效考核_网络绩效伦理
- 中科蓝汛蓝牙耳机AB5356A/AB5376A进入CBT模式
热门文章
- MyBatis总结五:#{}和${}的用法和区别
- python3学习者的福音
- Samba服务全攻略
- Source Insight(vs2012,ultraedit) 中Tab键设置为4个空格代替
- PyRun_SimpleString的无穷怨念
- python自动登录百度空间
- 斐波那契数列;递归函数;爬楼梯问题;
- 前端学习(2939):vue组件的使用
- [vue] vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
- [vue] 第一次加载页面时会触发哪几个钩子?