C++11 lambda的理解
C++11 的 lambda 表达式规范如下:
[ capture ] ( params ) mutable exception attribute -> ret { body } (1)
[ capture ] ( params ) -> ret { body } (2)
[ capture ] ( params ) { body } (3)
[ capture ] { body } (4)
// 简单的例子
// 这个例子有2个参数x和y 返回x+y
[](int x,int y){ return x+y; };
其实看起来和函数差不多
只不过使用了[]代替了函数名,
[]里面的捕获参数:
[] // 不捕获外部变量
[&] // 引用形式捕获所有外部变量
[=] // 传值形式捕获所有外部变量
[x, &y] // x以传值捕获(默认),y 以引用捕获。
[&, x] // x单独以传值方式捕获,其余都为引用
[=, &x] // x单独以引用方式捕获,其余都为传值
//例子2
// 遍历所有窗口句柄
//
int main()
{
auto func = [](HWND hwnd,LPARAM lpm){
printf("wnd : %d\n",hwnd);
return ;
}; EnumWindows(func,); Sleep(INFINITE);
return ;
}
;
;对上面这段函数进行反汇编:
;
>/$ 6A push ; /lParam = 0
|. push <lambda_e719811ef777855facd3e231>; |Callback = ConsoleA.<lambda_xxxxxxxx>
|. FF15 04B19900 call dword ptr [<&USER32.EnumWindows>>; \EnumWindows
0099100D |. 6A FF push -
0099100F |. FF15 00B09900 call dword ptr [<&KERNEL32.Sleep>]
|. 33C0 xor eax, eax
\. C3 retn Callback:
>/. push ebp
|. 8BEC mov ebp, esp
0099101B |. FF75 push dword ptr [ebp+] ; /<%d>
0099101E |. 00039A00 push 009A0300 ; |format = "wnd : %d",LF,""
|. E8 call printf ; \printf
|. pop ecx
|. 33C0 xor eax, eax
0099102B |. pop ecx
0099102C |. inc eax
0099102D |. 5D pop ebp
0099102E \. C2 retn
C++11 lambda的理解的更多相关文章
- 详解 C++11 lambda表达式
详解 C++11 lambda表达式 lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的la ...
- C++11 lambda 表达式
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- C++11 lambda 表达式解析
C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...
- C++ 11 Lambda表达式、auto、function、bind、final、override
接触了cocos2dx 3.0,就必须得看C++ 11了.有分享过帖子:[转帖]漫话C++0x(四) —- function, bind和lambda.其实最后的Lambda没太怎么看懂. 看不懂没关 ...
- c++11 lambda(了解)
this->send_change_equip = ([this](ChangeEquipPT channge) { send_cmd(s2c_change_equip, &channg ...
- C++11 Lambda表达式简单解析
C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...
- C++ 11 lambda
转载:http://www.cnblogs.com/kedebug/p/3224561.html lambda 表达式的简单语法如下:[capture] (parameters) -> retu ...
- C++11—lambda函数
[1]lambda表达式语法定义 lambda表达式的语法定义如下: [capture] (parameters) mutable ->return-type {statement}; (1) ...
- C++11 lambda表达式学习
lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...
随机推荐
- android studio fetching android sdk component information
解决办法: 1.找到Android Studio安装目录下的idea.properties文件 2.增加disable.android.first.run=true
- sublime text 2 ubuntu安装及插件管理
参考 dudumao 1.下载Sublime Text2官网下载地址:http://www.sublimetext.com 2.安装Sublime Text2解压即可使用 $ sudo tar -jx ...
- python 读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- 第五篇T语言实例开发,数组空间使用
数组空间使用 排序算法 在实际中,当有多个无序数据时.我们就需要多数据进行排序 典型的排序:冒泡排序 排序原理 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两 ...
- Linux下高cpu解决方案(转载)
昨天搞定了一个十万火急的issue,客户抱怨产品升级后系统会变慢和CPU使用率相当高,客户脾气很大,声称不尽快解决这个问题就退货,弄得我们 R&D压力很大,解决这个issue的任务分给了我,客 ...
- Git 基础
取得项目的 Git 仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在工作目录中初 ...
- 2016HUAS_ACM暑假集训4M - 基础DP
简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1 //测试组数T 5 10 ...
- JSBinding / FAQ & Trouble Shooting
Q: Why javascript file extension is .javascript?A: Because Unity treats .js files as Unity script an ...
- 深入浅出SQL Server中的死锁
简介 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相关观念有一个理解. 一些基础知识 要理解SQL Server中的死锁,更好的方式是通过类比从更大的面理 ...
- 【原创】新手用外挂来学C语言,外挂入门教程【2013.03.12更新V5.1版
目录 e@vZg8Ie 第一章 配置编译环境 - 5 - W7~_XI 1.1 安装CB和gcc - 6 - fj( WH L 1.2 使用gcc编写我们的第一个C程序 - 1 ...