_编程语言_C++_Lambda函数与表达式
C++11提供了对匿名函数的支持,称为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语言_C++_时间
C++ 标准库没有提供日期类型,使用C预压的日期和事件操作. 使用时引入头文件 <ctime> . 四个和事件相关的函数: clock_t // 系统时间和日期表示为某种整数time_t ...
- _编程语言_C++_宏定义#define 和 常量const 的区别
C++中有两种定义常量的方式:#define预处理和const关键字 #define 预处理指令 #include <iostream> using namespace std; #def ...
- _编程语言_C++_std
正常使用 cout << "Count is "<<i<<endl; 含有std std::cout << "Count ...
- _编程语言_C++_简介
扩展名: .cpp..cp或.c C++编译器: GNU的gcc 编译器
- _编程语言_C++_setw()
C++ 中使用setw(int n) 来控制输出间隔. 例如: cout<<)<<'a'<<endl;//s与a之间有7个空格,setw()只对后面紧跟的输出产生作 ...
- Python笔记_第二篇_面向过程_第二部分_1.函数
函数:这个词属于一个数学概念,在编程语言借鉴了这个概念,表现形式是一段程序代码的组合,也叫“程序集”.有过编程基础的人很容易理解这个概念,当我们编写程序越来越多的时候,程序设计大师们会把散乱的程序进行 ...
- c#中匿名函数lamb表达式
c#中匿名函数lamb表达式 实例一:(其实,这样都是些语法糖) using System; using System.Collections.Generic; using System.Linq; ...
- orale做报表常用函数和表达式的总结
最近一段时间连续的做了几十张报表,通过原生sql对数据进行分析 ,也算是有了一定的了解,发现其中一些函数和表达式使用频率较高,现总结如下: (1).round()函数 round函数说白了就是把一 ...
- javascript函数定义表达式和函数声明的区别
在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...
随机推荐
- c# ?. 空值传播运算符
当左侧为空时不执行右侧代码,避免出现为null的错误,同时也避免了判断是否为null,可以和??一起连用,省了好多事.举例如下: 以前:var res=obj==null?5:obj.a; 现在:va ...
- 如何查看mysql数据库表所使用的引擎(转载)
我们怎么样才能准确的查看mysql的存储引擎呢,下面我给大家介绍两种正确的方式. 1)正确方式一: SHOW TABLE STATUS from 数据库库名 where Name='表名' 2)mys ...
- 12.Mysql存储过程和函数
12.存储过程和函数12.1 什么是存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输, ...
- IIS 域名 带参数 设置重定向
IIS里面设置重定向后,经常会出现,从百度快照里直接打不开的情况. 可以在IIS里面设置重定向的时候,把参数加上,格式如下: http://www.***.com%S%Q
- 未能找到 CodeDom 提供程序类型“Microsoft.VJSharp.VJSharpCodeProvider,
错误 1 未能找到 CodeDom 提供程序类型“Microsoft.VJSharp.VJSharpCodeProvider, VJSharpCodeProvider, Version=2.0.0.0 ...
- hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa
http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...
- Bowtie2的安装与使用
Bowtie2的安装与使用 2017-06-15 18:58:52 342 0 0 Bowtie2用来快速比对短reads(50-100bp)与参考基因组,与常规的比对软件不 ...
- nodejs buffer 内存泄漏问题
摘自<Node.js 高级编程> var buffer = new Buffer("this is the content of my buffer"); var sm ...
- c++课设学生成绩与学籍管理系统
题目要求(手打,累):设计一个类CStudent,类中包含一个学生的基本数据如下: 编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩. 并假设编号为整数,且从1号往后连续编码:姓名为字符串,性别 ...
- Java语法基础动手动脑
仔细阅读示例:EnumTest.Java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? EnumTest.java public class EnumTest { pub ...