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的理解的更多相关文章

  1. 详解 C++11 lambda表达式

    详解 C++11 lambda表达式   lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的la ...

  2. C++11 lambda 表达式

    C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...

  3. C++11 lambda 表达式解析

    C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看.本文作为 5 月的最后一篇博客,将介绍 C++11 的 lamb ...

  4. C++ 11 Lambda表达式、auto、function、bind、final、override

    接触了cocos2dx 3.0,就必须得看C++ 11了.有分享过帖子:[转帖]漫话C++0x(四) —- function, bind和lambda.其实最后的Lambda没太怎么看懂. 看不懂没关 ...

  5. c++11 lambda(了解)

    this->send_change_equip = ([this](ChangeEquipPT channge) { send_cmd(s2c_change_equip, &channg ...

  6. C++11 Lambda表达式简单解析

    C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...

  7. C++ 11 lambda

    转载:http://www.cnblogs.com/kedebug/p/3224561.html lambda 表达式的简单语法如下:[capture] (parameters) -> retu ...

  8. C++11—lambda函数

    [1]lambda表达式语法定义 lambda表达式的语法定义如下: [capture] (parameters) mutable ->return-type {statement}; (1) ...

  9. C++11 lambda表达式学习

    lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...

随机推荐

  1. rtmp转m3u8

    不是所有的地址改成这样都能播 需要自己测试 先说一下rtmp的其中rtmp的常见的差不多是3种 1.一种是wowza服务器的 比如这个地址rtmp://116.55.245.135:8096/live ...

  2. sublime上安装c/c++代码分析工具 sublime Linter - cppcheck

    项目官方说明 sublime Linter - cppcheck 理解下sublime Linter - cppcheck, 它是插件的插件,sublime的插件sublimeLinter的插件.网络 ...

  3. ggplot2 多图排版

    和R自带的绘图系统不同,ggplot2不能直接通过par(mfrow) 或者 layout()来排版多张图片.终于发现,其实可以通过一个『gridExtra』包来搞定: require(gridExt ...

  4. 【Android Studio快捷键】之代码提示

    接下来说如何设置代码自动提示,如图: 图上内容比较多,我直接按区域划分成6块区域来说吧: 区域1:这个选项是关于提示的时候如何进行匹配,即按照什么条件来进行提示内容的搜索. All:选择这个的话,意思 ...

  5. BeanUtils.copyProperties() 用法

    BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处 ...

  6. [C# WPF]MoeEroViewer Developing Log

    [C# WPF]MoeEroViewer Developing Log 1st - Base Document run on Https://github.com/Amarillys/MoeEroVi ...

  7. angularjs compile和link

    原文:http://www.cnblogs.com/GoodPingGe/p/4361354.html ************************************************ ...

  8. 「LINUX资料」基础命令概览(一)

  9. ASP.NET MVC5 实现网址伪静态

    一.路由规则: routes.MapRoute( name: "Default1", url: "more_{root}_{plate}.html", defa ...

  10. 关于AJAX中status中12030与12031的错误

    最近使用ajax调用一般处理程序时,出现外网调用不成功,内网调用成功,错误码为12030或12301的情况.当时在网上搜索了一些资料,有的说是因为文件中取了个中文名称导致的,有的是说要配置什么IIS之 ...